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

8.4.2 NetCOBOLのCOM連携機能を使って操作する

POWERGETCONTROLユーティリティを利用せず、NetCOBOLのCOM連携機能だけを利用して、Controlsコレクションオブジェクトを構成する任意のコントロールを取り出し、操作することもできます。

以下に、POWERGETCONTROLユーティリティの説明で作成したサンプルと同様の処理をするプログラムのサンプルを示します。

REPOSITORY
        CLASS COM AS "*COM"
ClearButton-Click
    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
   * *COMクラスを使ってフォームにアクセスするための
   * COMオブジェクト
    01 COM-FORM             OBJECT REFERENCE COM.
   * Controlsコレクションオブジェクト
    01 CONTROLS-COLLECTION  OBJECT REFERENCE COM.
   * *COMクラスを使ってコントロールにアクセスするための
   * COMオブジェクト
    01 COM-CONTROL          OBJECT REFERENCE COM.
   * フォーム上に配置されたコントロールの個数
    01 CONTROLS-COUNT       PIC S9(9) COMP-5.
   * フォーム上に配置されたコントロールのインデックス
    01 CONTROL-INDEX        PIC S9(9) COMP-5.
    01 WK-CLASSPROGID       PIC X(80).
    01 EMPTY-TEXT           PIC X VALUE SPACE.
    PROCEDURE       DIVISION.
   *    フォームに対応するCOMオブジェクトを取り出します。
        CALL "POWERCONVTOCOM" USING POW-SELF RETURNING COM-FORM
   *    フォームのControlsコレクションオブジェクトを取得します。
        INVOKE COM-FORM "GET-CONTROLS" RETURNING CONTROLS-COLLECTION
   *    Controlsコレクションオブジェクトからコントロールの
   *    個数を取得します。
        INVOKE CONTROLS-COLLECTION "GET-COUNT" RETURNING CONTROLS-COUNT
   *    フォーム上のコントロールを順次取り出し、テキストボックス
   *    コントロールだけを検索し、テキストをクリアします。
        PERFORM VARYING CONTROL-INDEX FROM 1 BY 1
                UNTIL CONTROL-INDEX > CONTROLS-COUNT
   *      コントロールに対応するCOMオブジェクトを取り出します。
          INVOKE CONTROLS-COLLECTION "GET-ITEM" USING CONTROLS-COUNT
                                                RETURNING COM-CONTROL
   *      取り出したコントロールのクラス名を求めます。
          INVOKE COM-CONTROL "GET-CLASSPROGID" RETURNING WK-CLASSPROGID
   *      テキストボックスコントロールかどうか、クラス名を使って判定し、
   *      テキストボックスコントロールであれば、テキストをクリアします。
          IF WK-CLASSPROGID = "Fujitsu.PcobTextBox.4" THEN
            INVOKE COM-CONTROL "SET-TEXT" USING EMPTY-TEXT
          END-IF
   *      Controlsコレクションオブジェクトを解放します。
          SET CONTROLS-COLLECTION TO NULL
        END-PERFORM
   *    取り出したコントロールのCOMオブジェクトを解放します。
        SET COM-CONTROL TO NULL
   *    フォームのCOMオブジェクトを解放します。
        SET COM-FORM TO NULL

ここで作成したサンプルプログラムのコレクションオブジェクトを操作する部分を、外部COBOLファイルとして作成し、COM連携時のエラーチェック機能を組み込んだサンプルプログラムが、"FormControls\Controls2.ppj"に格納されています。必要に応じて参照してください。

NetCOBOLのCOM連携機能の詳細については、『NetCOBOL ユーザーズガイド』を参照してください。