オブジェクトを引数として受け取るイベント手続きを編集する場合、手続きを記述する前に、連絡節の修正が必要です。たとえば、ツリービューコントロールのノードがクリックされた場合に発生するNodeClickイベントでは、次のような手続きが初期値として生成されます。
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 POW-PCMNODE OBJECT REFERENCE [Class Name]. PROCEDURE DIVISION USING POW-PCMNODE.
オブジェクトを受け取る場合、上記の[Class Name]の部分を修正する必要があります。 修正してオブジェクトを受け取るには、以下の2つの方法があります。
オブジェクトのクラス名を設定して受け取る方法
NetCOBOLの*COMクラスを利用して受け取る方法
オブジェクトのクラス名を設定して受け取る
受け取るオブジェクトに対応するクラス名を、[Class Name]の部分に記述することで、手続き中でオブジェクトにアクセスできます。たとえば、上記のNodeClickイベントでは、ノードオブジェクトを受け取るため、[Class Name]を以下のように変更します。この変更により、手続き中でノードオブジェクト(POW-PCMNODE)にアクセスできるようになります。
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 POW-PCMNODE OBJECT REFERENCE POW-CNODE. PROCEDURE DIVISION USING POW-PCMNODE.
利用可能なオブジェクトのクラス名については、「オブジェクトのクラス名を利用してアクセスする」の表を参照してください。
NetCOBOLの*COMクラスを利用して受け取る
NetCOBOLのCOM連携機能である*COMクラスを利用してオブジェクトを受け取ります。この方法は、サードパーティによって提供されているコントロールのイベントの引数に、オブジェクトが割り当てられている場合など、クラス名がわからないオブジェクトを受け取る場合に利用します。この方法では、以下の手順で、引数で受け取ったオブジェクトを操作できるようにします。
フォーム環境部のリポジトリ段落(REPOSITORY)で*COMクラスを宣言します。
連絡節の[Class Name]をPOW-COBJECTに変更します。
イベント手続きまたはフォームの作業場所節で、COMオブジェクトとして参照するためのデータを定義します。
PowerCOBOLで用意している変換ルーチン"POWERCONVTOCOM"を呼び出し、連絡節で受け取ったオブジェクトをCOMオブジェクトに変換します。
COMオブジェクトを使って、オブジェクトにアクセスします。
最後に、使用したCOMオブジェクトにNULLを設定し、クリアします。
"POWERCONVTOCOM"の記述形式については、「NetCOBOLの*COMクラスを利用してアクセスする」を参照してください。
たとえば、NodeClickイベントで、NetCOBOLの*COMクラスを利用して引数を受け取る場合、以下のようになります。
CLASS COM AS "*COM"
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. * *COMクラスを使ってアクセスするためのノード用のCOMオブジェクト 01 COMNODE OBJECT REFERENCE COM. LINKAGE SECTION. 01 POW-PCMNODE OBJECT REFERENCE POW-COBJECT. PROCEDURE DIVISION USING POW-PCMNODE. * 最初に受け取ったオブジェクトをCOMオブジェクトに変換します。 CALL "POWERCONVTOCOM" USING POW-PCMNODE RETURNING COMNODE * COMオブジェクト(COMNODE)を使ってオブジェクトにアクセスします。 … * 最後に、使用したCOMオブジェクトをクリアします。 SET COMNODE TO NULL