POWERGETCONTROLユーティリティを使って、Controlsコレクションオブジェクトを構成する任意のコントロールを取り出すことができます。POWERGETCONTROLユーティリティでは、コントロールをNetCOBOLの*COMクラスに対応するオブジェクトとして取り出すことができます。
POWERGETCONTROLの書き方
CALL ”POWERGETCONTROL” USING POW-SELF コントロールのインデックス RETURNING COMオブジェクト
POW-SELFはフォーム自身を表しています。POW-SELFの代わりに、フォーム名を使うこともできます。
PIC S9(9) COMP-5
Controlsコレクションオブジェクトを構成するコントロールのインデックスを指定します。インデックスは、フォーム上に配置されたすべてのコントロールに、1から描画順序(背面から前面方向に昇順)に従って振られた、一意な値です。
描画順序の設定方法については、「5.2.3 コントロールの描画順序を変更する」を参照してください。また、描画順序は、フォームのZOrderメソッドによって実行時に動的に変更することもできます。
USAGE IS OBJECT REFERENCE COMのクラス名
NetCOBOLで扱うことができる、COMオブジェクトを取り出すためのデータ項目です。この変換ルーチンの出力となります。省略することはできません。COMのクラス名は、リポジトリ段落(REPOSITORY)でNetCOBOLの*COMクラスとして宣言したクラス名です。
POWERGETCONTROLの使用例
たとえば、フォーム上のすべてのテキストボックスコントロールに表示、または入力されたテキストをクリアする場合、以下のような手続きを作成します。
CLASS COM AS "*COM"
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. * フォーム上に配置されたコントロールの個数 01 CONTROLS-COUNT PIC S9(9) COMP-5. * フォーム上に配置されたコントロールのインデックス 01 CONTROL-INDEX PIC S9(9) COMP-5. * *COMクラスを使ってコントロールにアクセスするための * COMオブジェクト 01 COM-CONTROL OBJECT REFERENCE COM. 01 WK-CLASSPROGID PIC X(80). 01 EMPTY-TEXT PIC X VALUE SPACE. PROCEDURE DIVISION. * フォーム上のコントロールの個数を取得します。 MOVE "Count" OF "Controls" OF POW-SELF TO CONTROLS-COUNT * フォーム上のコントロールを順次取り出し、テキストボックス * コントロールだけを検索し、テキストをクリアします。 PERFORM VARYING CONTROL-INDEX FROM 1 BY 1 UNTIL CONTROL-INDEX > CONTROLS-COUNT * コントロールに対応するCOMオブジェクトを取り出します。 CALL "POWERGETCONTROL" USING POW-SELF CONTROL-INDEX 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 * 取り出したコントロールのCOMオブジェクトを解放します。 SET COM-CONTROL TO NULL END-PERFORM
コントロールの個数は、上記の例のように、ControlsコレクションオブジェクトのCountプロパティを使って求めることができます。
ここで作成したサンプルプログラムは、"FormControls\Controls1.ppj"に格納されています。必要に応じて参照してください。
PowerCOBOLが提供している各コントロールのクラス名については、『リファレンス』を参照してください。
ポイント
ControlsコレクションオブジェクトのItemプロパティを使って、コントロールに対応するCOMオブジェクトを取り出すこともできます。以下にItemプロパティを使った2つの例を示します。
Itemプロパティの使用例1
フォーム上の、3番めに描画されるコントロールに対応するCOMオブジェクトは、以下のように取り出すことができます。
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. * コントロールを取り出すためのデータ 01 WK-CONTROL OBJECT REFERENCE POW-COBJECT. * コントロールに対応するCOMオブジェクト 01 COM-CONTROL OBJECT REFERENCE COM. PROCEDURE DIVISION. * フォーム上の3番めのコントロールを取り出します。 MOVE "Item"(3) OF "Controls" OF POW-SELF TO WK-CONTROL * COMオブジェクトに変換します。 CALL "POWERCONVTOCOM" USING WK-CONTROL RETURNING COM-CONTROL
Itemプロパティの使用例2
フォーム上の、CmText1という名前のコントロールに対応するCOMオブジェクトは、以下のように取り出すことができます。
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. * コントロールを取り出すためのデータ 01 CONTROL-NAME PIC X(10) VALUE "CmText1". * コントロールを取り出すためのデータ 01 WK-CONTROL OBJECT REFERENCE POW-COBJECT. * コントロールに対応するCOMオブジェクト 01 COM-CONTROL OBJECT REFERENCE COM. PROCEDURE DIVISION. * フォーム上のCmText1という名前のコントロールを取り出します。 MOVE "Item"(CONTROL-NAME) OF "Controls" OF POW-SELF TO WK-CONTROL * COMオブジェクトに変換します。 CALL "POWERCONVTOCOM" USING WK-CONTROL RETURNING COM-CONTROL