7.112.2 SET_REFの使用例

例1:*CREATE_FROM

以下のフォームを使用して、他のフォームのインスタンスをロード (作成および表示) することができます。

00000083

このロード用フォームには、フォーム(#FORMS)のコレクションがあります。ロードボタンをクリックすると、指定したフォームの新規インスタンスが作成され、#FORMSコレクションに追加された後で表示されます。

BEGIN_COM HEIGHT(123) LEFT(296) TOP(120) WIDTH(209)
DEFINE_COM CLASS(#PRIM_PHBN) NAME(#PHBN_1) CAPTION('Load') DISPLAYPOSITION(2) LEFT(16) PARENT(#COM_OWNER) TABPOSITION(2) TOP(45)
*The name of the form to be loaded
DEFINE_COM CLASS(#STD_OBJ.Visual) NAME(#STD_OBJ) CAPTION('Form to Load:') DISPLAYPOSITION(1) HEIGHT(19) LABELTYPE(Caption) LEFT(8) MARGINLEFT(80) PARENT(#COM_OWNER) TABPOSITION(1) TOP(8) WIDTH(161)
*The form counter and collection
define #FormTot Reffld(#STD_NUM) default(0)
DEFINE_COM CLASS(#PRIM_KCOL) NAME(#FORMS) COLLECTS(#PRIM_FORM) KEYEDBY(#STD_NUM) STYLE(Collection)
 
define #Position Reffld(#STD_NUM) default(1)
 
EVTROUTINE HANDLING(#PHBN_1.Click)
* increase form counter by one
Change #FormTot '#FormTot + 1'
 
* create a new instance of the named form and set a reference to it
Set_Ref #Forms<#FormTot> (*Create_from #Std_Obj.Value)
 
* control the position of the form
Set #Forms<#FormTot> Left(#Position) Top(#Position)
Change #Position '#Position + 10'
 
*show the form
Invoke #Forms<#FormTot>.ShowForm
ENDROUTINE
 
END_COM
 

上記のソース・コードをフォームのコンポーネントにコピー・アンド・ペーストし、コンパイルしてみてください。フォームを実行します。さらに、このフォームを使用して他のフォームのインスタンスの作成および表示を行うには、表示する名前を指定してロードボタンをクリックします。

例2:*CREATE_AS

Microsoft WordのActiveXコンポーネントへのコンポーネント参照が動的に定義されるため、コンポーネント定義のステートメントが実行されても参照は作成されません。

DEFINE_COM Class(#VA_WORD.Application) Name(#WordApp) Reference(*DYNAMIC)
 

オブジェクトへの参照は、SET_REFコマンドで明示的に宣言された場合のみ作成されます。

SET_REF COM(#WordApp) To(*CREATE_AS #VA_WORD.application)
 

参照は*CREATE_ASというキーワードを使用して作成されるため、#WordAppコンポーネントの新規インスタンスが作成されます。

例3:*DYNAMICと変数名

Microsoft Wordドキュメント・タイプの変数が定義されるため、この変数を使用してドキュメントを参照することができます。

DEFINE_COM Class(#VA_WORD.Document) Name(#WordDoc) Reference(*DYNAMIC)
 

変数名は、ドキュメント作成時にパラメータadd_retvalで戻される新たに作成したドキュメントへの参照を作成するために使用します。

INVOKE Method(#WordApp.documents.add) add_retval(#WordDoc)
 

この参照は、ドキュメントのメソッド、プロパティ、およびイベントにアクセスするために使用されます。

Set Com(#edit_1) Value(#WordDoc.Name_COM)
INVOKE Method(#WordDoc.PrintOut)
 

その後、同じ変数を変更して、その時点でアクティブなドキュメントを参照するように設定します。

SET_REF COM(#WordDoc) To(#WordApp.ActiveDocument)