| 4D v18CALL FORM | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v18
 CALL FORM 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CALL FORM ( window ; method {; param}{; param2 ; ... ; paramN} ) | ||||||||
| 引数 | 型 | 説明 | ||||||
| window | WinRef |   | ウィンドウ参照番号 | |||||
| method | テキスト |   | フォームで実行させるプロジェクトメソッド名 | |||||
| param | 式 |   | メソッドに渡す引数 | |||||
CALL FORM コマンドは、window に指定したウィンドウに表示されているフォームのコンテキストにおいて、任意の param パラメーターを使った method の実行を要求します。どのプロセスがそのフォームを持っているかは、問題になりません。
ワーカーを利用したプロセス間通信 (ワーカーについて 参照) の機能は、ワーカーが持つメッセージボックスに基づいて設計されていますが、ウィンドウも同様にメッセージボックスを持っており、ウィンドウがフォームを表示した後に (On Load フォームイベントの後) に使用することができます。CALL FORM はメソッド名と引数をカプセル化し、メッセージの形でウィンドウが持つメッセージボックスに受け渡します。フォームは自身のプロセスにおいて、そのメッセージを実行します。このコマンドはコオペラティブおよびプリエンプティブ・プロセスの両方で使用できるため、プリエンプティブ・プロセスとフォーム間の情報共有をも可能にします。
window には呼び出すフォームを表示しているウィンドウの参照番号を渡します。
method には、window の親プロセスのコンテキストで実行するプロジェクトメソッド名を受け渡します。
param  パラメーターに値を受け渡すことで、一つ以上の引数をメソッドに受け渡すことができます。引数の渡し方は、サブルーチンを使う場合と同じです  (メソッドに引数を渡す  参照)。フォームのコンテキストで実行を開始する際に、メソッドはこれらの引数を $1, $2, などの値として受け取ります。配列はメソッドのパラメーターに渡せないことに留意してください。また、CALL FORM コマンドを使うにあたっては、次のことに留意してください: 
 
メイン・フォームに設置されたボタンをクリックすると、背景色とメッセージの異なる二つのフォームウィンドウが同時に開くようにします。また、この子ウィンドウのメッセージは、後から違う内容を送信して表示を変更できるようにします。
まず、メイン・フォームのボタンに設定するオブジェクトメソッドです:
  // 子ウィンドウを作成し、フォームを表示させます
  // 一つ目の子ウィンドウ
 formRef1:=Open form window("FormMessage";Palette form window;On the left)
 SET WINDOW TITLE("MyForm1";formRef1)
 DIALOG("FormMessage";*)
 SHOW WINDOW(formRef1)
 
  // 二つ目の子ウィンドウ
 formRef2:=Open form window("FormMessage";Palette form window;On the left+500)
 SET WINDOW TITLE("MyForm2";formRef2)
 DIALOG("FormMessage";*)
 SHOW WINDOW(formRef2)
 
  // 背景色の指定
 CALL FORM(formRef1;"doSetColor";0x00E6F2FF)
 CALL FORM(formRef2;"doSetColor";0x00F2E6FF)
  // メッセージの表示
 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello Form 2")doAddMessage メソッドは "FormMessage" フォームのリストボックスに行を追加します:
 C_TEXT($1) // コール元のプロセス名
 C_TEXT($2) // 表示するメッセージ
  // $2 からメッセージを取得し、リストボックスにメッセージを記録します
 $p:=OBJECT Get pointer(Object named;"Column1")
 INSERT IN ARRAY($p->;1)
 $p->{1}:=$1+" sends "+$2ランタイムでは次のような結果になります:

CALL FORM コマンドを繰り返し実行することで、メッセージを追加していくことができます:
 CALL FORM(formRef1;"doAddMessage";Current process name;"Hello 2 Form 1")
 CALL FORM(formRef2;"doAddMessage";Current process name;"Hello 2 Form 2")
CALL FORM コマンドを利用することで、プロセス変数を使わずにフォームにカスタム設定 (規定値など) を受け渡すことができます:
 $win:=Open form window("form")
 CALL FORM($win;"configure";param1;param2)
 DIALOG("form")
	プロダクト: 4D
	テーマ: フォームイベント
	番号: 
        1391
        
        
        
	
	初出: 4D v15 R5
	変更: 4D v16 R4
	
	
	
	
	
	
	
	
	
	
	
	ランゲージリファレンス ( 4D v18)
	
	
	
	
	
 コメントを追加
コメントを追加