ページの先頭行へ戻る
NetCOBOL V12.0 PowerCOBOL ユーザーズガイド
FUJITSU Software

8.2.1 オブジェクトへアクセスするには

オブジェクトへアクセスするには、以下の3つの方法があります。

コントロールと同様にアクセスする

フォーム(Form)オブジェクトは、コントロールと同様にアクセスすることができます。たとえば、フォームのキャプションを変更する場合は、以下のように記述できます。

        MOVE "新キャプション名" TO "Caption" OF POW-SELF

この形式では、POW-SELFの代わりにフォーム名を指定することもできます。

フォーム以外のオブジェクトは、コントロールの構成要素になっています。コントロールは、これらの構成要素となるオブジェクトを指し示すプロパティをもっています。このプロパティを使って、COBOLの集団項目内のデータにアクセスするように、修飾を用いてオブジェクトにアクセスします。

たとえば、ツリービューコントロールの2番めのルートノード(最上位階層にある項目)に表示されている文字列を参照する場合は、以下のように記述します。

    MOVE "Text" OF "Root"(2) OF ツリービューコントロール名 TO 転記先

また、スタティックテキストコントロールのフォントサイズを20に変更する場合は、以下のように記述します。

    MOVE 20 TO "Size" OF "Font" OF スタティックテキストコントロール名

ポイント

各コントロールがもつオブジェクトの種類、およびオブジェクトがもつプロパティやメソッドについての詳細は、『リファレンス』を参照してください。

オブジェクトのクラス名を利用してアクセスする

オブジェクトに対応するクラス名をUSAGE句で宣言したデータに、オブジェクト自体を格納することにより、そのデータを利用してオブジェクトにアクセスすることができます。

PowerCOBOLでは、以下のクラス名が利用できます。

オブジェクトの種類

クラス名

カラム(Column)

POW-CCOLUMN

フォント(Font)

POW-CFONT

リストアイテム(ListItem)

POW-CLISTITEM

ノード(Node)

POW-CNODE

その他

POW-COBJECT

たとえば、ツリービューコントロールのノードにアクセスする場合、以下のように記述します。

    WORKING-STORAGE SECTION.
    01  WK-ROOT-NODE  USAGE IS OBJECT REFERENCE POW-CNODE.
    01  WK-CHILD-NODE USAGE IS OBJECT REFERENCE POW-CNODE.
    01  WK-COUNT-NUM  PIC S9(9) COMP-5.
    PROCEDURE       DIVISION.
   * ツリービューコントロールの2番めのルートノードを取り出します
        MOVE "Root"(2) OF ツリービューコントロール名 TO WK-ROOT-NODE
   * 2番めのルートノードの3番めの子ノードを取り出します
        MOVE "Child"(3) OF WK-ROOT-NODE TO WK-CHILD-NODE
   * 子ノードの表示文字列を変更し、その配下にあるノード数を求めます
        MOVE "新テキスト" TO "Text" OF WK-CHILD-NODE
        MOVE "Count" OF WK-CHILD-NODE TO WK-COUNT-NUM

ポイント

各コントロールがもつオブジェクトの種類、およびオブジェクトがもつプロパティやメソッドについての詳細は、『リファレンス』を参照してください。また、その他の使用例については、オブジェクトをもつコントロールのサンプルプログラム("\TreeView\TreeView.ppj"や"ListView\ListView.ppj"など)を参照してください。

注意

オブジェクトのクラス名を利用してプロパティにアクセスする場合は、大文字と小文字を区別してプロパティ名を記述する必要があります。

NetCOBOLの*COMクラスを利用してアクセスする

NetCOBOLのCOM連携機能である*COMクラスを利用して、オブジェクトにアクセスすることができます。

この方法は、サードパーティによって提供されているコントロールのオブジェクトにアクセスする場合など、オブジェクトのクラス名がわからないときに使用します。アクセスするための手順を以下に示します。

  1. フォーム環境部のリポジトリ段落(REPOSITORY)で*COMクラスを宣言します。

  2. イベント手続きまたはフォームの作業場所節(WORKING-STORAGE)で、オブジェクトを取り出すためのデータを定義します。

  3. イベント手続きまたはフォームの作業場所節で、*COMクラスのオブジェクト(COMオブジェクト)として参照するためのデータを定義します。

  4. 手続き中で、処理対象とするオブジェクトを取り出します。

  5. "POWERCONVTOCOM"を呼び出し、オブジェクトをCOMオブジェクトに変換します。

  6. COMオブジェクトを使って、オブジェクトにアクセスします。

  7. 最後に、使用したCOMオブジェクト用のデータにNULLを設定し、クリアします。

"POWERCONVTOCOM"は、オブジェクトをCOMオブジェクトとして扱えるようにするための、PowerCOBOLで用意している変換ルーチンです。また、COMオブジェクトをPowerCOBOLで扱えるようにするための変換ルーチンとして、"POWERCONVFROMCOM"があります。"POWERCONVTOCOM"および"POWERCONVFROMCOM"の記述形式を以下に示します。

POWERCONVTOCOMの書き方

  CALL  ”POWERCONVTOCOM”
            USING  オブジェクト
            RETURNING  COMオブジェクト
オブジェクト
  USAGE  IS  OBJECT  REFERENCE  POW-COBJECT

PowerCOBOLのプロパティやメソッドを使って取り出した、オブジェクトを示すデータ項目です。この変換ルーチンの入力となります。この引数を省略することはできません。データ部の定義では、"USAGE IS"を省略することができます。

COMオブジェクト
  USAGE  IS  OBJECT  REFERENCE  COMのクラス名

NetCOBOLで扱うことができるCOMオブジェクトを取り出すためのデータ項目です。この変換ルーチンの出力となります。この引数を省略することはできません。データ部の定義では、"USAGE IS"を省略することができます。COMのクラス名は、リポジトリ段落(REPOSITORY)でNetCOBOLの*COMクラスとして宣言したクラス名です。

復帰値

ありません。PROGRAM-STATUSの値は不定となります。

POWERCONVTOCOMの使用例

たとえば、ツリービューコントロール上でノードが選択されている状態で、コマンドボタンコントロール(Btn-Rename)をクリックしたとき、選択中のノードに表示されている文字列を変更するには、以下のような手続きを作成します。

REPOSITORY
        CLASS COM AS "*COM"
Btn-Rename-Click
    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
    01 WK-TEXT      PIC X(100).
   * オブジェクトを取り出すための領域
    01 PCMNODE      USAGE IS OBJECT REFERENCE POW-COBJECT.
   * *COMクラスを使ってアクセスするためのノード用のCOMオブジェクト
    01 COMNODE      USAGE IS OBJECT REFERENCE COM.
    PROCEDURE       DIVISION.
   *    指定された文字列を取り出します。
        MOVE "Text" OF CmText11 TO WK-TEXT
   *    ツリービューコントロールで選択中のノードオブジェクトを取り出します。
        MOVE "SelNode" OF TreeView TO PCMNODE
   *    COM連携機能を利用して、NODEオブジェクトにアクセスします。
        IF PCMNODE NOT = 0 THEN
   *      *COMクラスを使ってアクセスできるように、
   *      ノードオブジェクトを変換します。
          CALL "POWERCONVTOCOM" USING PCMNODE RETURNING COMNODE
   *      指定された文字列を選択中のノードオブジェクトのラベルに設定します。
          INVOKE COMNODE "SET-TEXT" USING WK-TEXT
   *      使用したCOMオブジェクトをクリアします。
          SET COMNODE TO NULL
        END-IF

ポイント

  • この例題では、PowerCOBOLが提供するツリービューコントロールを使っています。したがって、PCMNODEをPOW-CNODE型のオブジェクトとして宣言することもできますが、POWERCONVTOCOMの利用方法を示すために、POW-COBJECTを使っています。
    POW-CNODEを使って宣言した場合、COMオブジェクトに変換しないで、ノードオブジェクトを操作できますが、POW-COBJECTを使って宣言した場合、オブジェクトを操作するにはPOWERCONVTOCOMでCOMオブジェクトに変換する必要があります。また、最後にCOMオブジェクトをクリアする必要があります。

  • "SET-TEXT"メソッドは、NetCOBOLが用意しているメソッドで、対象となるCOMオブジェクトの"TEXT"プロパティに引数の値を設定することを示しています。詳細は、『NetCOBOL ユーザーズガイド』を参照してください。

  • ここで作成したサンプルプログラムは、"ComClass\AccessToObject.ppj"に格納されています。必要に応じて参照してください。

POWERCONVFROMCOMの書き方

  CALL  ”POWERCONVFROMCOM”
            USING  COMオブジェクト
            RETURNING  オブジェクト
COMオブジェクト
  USAGE  IS  OBJECT  REFERENCE  COMのクラス名

NetCOBOLで扱うことができるCOMオブジェクトを示すデータ項目です。この変換ルーチンの入力となります。この引数を省略することはできません。データ部の定義では、"USAGE IS"を省略することができます。COMのクラス名は、リポジトリ段落(REPOSITORY)でNetCOBOLの*COMクラスとして宣言したクラス名です。

オブジェクト
  USAGE  IS  OBJECT  REFERENCE  POW-COBJECT

PowerCOBOLのプロパティやメソッドで利用するために取り出した、COMオブジェクトを示すデータ項目です。この変換ルーチンの出力となります。この引数を省略することはできません。データ部の定義では、"USAGE IS"を省略することができます。

復帰値

ありません。PROGRAM-STATUSの値は不定となります。

POWERCONVFROMCOMの使用例

たとえば、ADOデータソースコントロールのRecordsetプロパティに、COMオブジェクトとして作成されたRecordsetオブジェクトを設定する場合、以下のような手続きを作成します。

REPOSITORY
        CLASS COM AS "*COM"
MainForm-WORKING-STORAGE
   * Recordsetオブジェクトを示すCOMオブジェクト
    01 COMRST       OBJECT REFERENCE COM.
   * オブジェクトを取り出すための領域
    01 PCMRST       OBJECT REFERENCE POW-COBJECT.
Btn-Connect-Click
    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
    PROCEDURE       DIVISION.
   * 作成したRecordsetオブジェクトをPowerCOBOLのオブジェクト形式に変換します。
        CALL "POWERCONVFROMCOM" USING COMRST RETURNING PCMRST
   * ADOデータソースコントロールのRecordsetプロパティに設定します。
        INVOKE CmADODataSource1 "SETREF-Recordset" USING PCMRST
        …