POWERGETCONTROLユーティリティを利用せず、NetCOBOLのCOM連携機能だけを利用して、Controlsコレクションオブジェクトを構成する任意のコントロールを取り出し、操作することもできます。
以下に、POWERGETCONTROLユーティリティの説明で作成したサンプルと同様の処理をするプログラムのサンプルを示します。
CLASS COM AS "*COM"
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 ユーザーズガイド』を参照してください。