4D v16.3

CALL FORM

ホーム

 
4D v16.3
CALL FORM

CALL FORM 


 

CALL FORM ( window ; method {; param}{; param2 ; ... ; paramN} ) 
引数   説明
window  WinRef in ウィンドウ参照番号
method  テキスト in フォームで実行させるプロジェクトメソッド名
param  in メソッドに渡す引数

説明   

CALL FORM コマンドは、window に指定したウィンドウに表示されているフォームのコンテキストにおいて、任意の param パラメーターを使った method の実行を要求します。どのプロセスがそのフォームを持っているかは、問題になりません。

ワーカーを利用したプロセス間通信 (ワーカーについて 参照) の機能は、ワーカーが持つメッセージボックスに基づいて設計されていますが、ウィンドウも同様にメッセージボックスを持っており、ウィンドウがフォームを表示した後に (On Load フォームイベントの後) に使用することができます。CALL FORM はメソッド名と引数をカプセル化し、メッセージの形でウィンドウが持つメッセージボックスに受け渡します。フォームは自身のプロセスにおいて、そのメッセージを実行します。このコマンドはコオペラティブおよびプリエンプティブ・プロセスの両方で使用できるため、プリエンプティブ・プロセスとフォーム間の情報共有をも可能にします。

window には呼び出すフォームを表示しているウィンドウの参照番号を渡します。

method には、window の親プロセスのコンテキストで実行するプロジェクトメソッド名を受け渡します。

param パラメーターに値を受け渡すことで、一つ以上の引数をメソッドに受け渡すことができます。引数の渡し方は、サブルーチンを使う場合と同じです (メソッドに引数を渡す 参照)。フォームのコンテキストで実行を開始する際に、メソッドはこれらの引数を $1, $2, などの値として受け取ります。配列はメソッドのパラメーターに渡せないことに留意してください。また、CALL FORM コマンドを使うにあたっては、次のことに留意してください:

  • テーブルやフィールドへのポインターが使えます
  • ローカル変数やプロセス変数を筆頭とした、変数へのポインターの利用は、プロセスメソッドによってアクセスした時点で未定義の可能性があるため、推奨されません。
  • 呼び出し先のフォームが呼び出し元とは別のプロセスに所属している場合に、オブジェクト型の引数を受け渡すと、4D は呼び出し先プロセスにそのオブジェクトのコピーを作成します。

メイン・フォームに設置されたボタンをクリックすると、背景色とメッセージの異なる二つのフォームウィンドウが同時に開くようにします。また、この子ウィンドウのメッセージは、後から違う内容を送信して表示を変更できるようにします。

まず、メイン・フォームのボタンに設定するオブジェクトメソッドです:

  // 子ウィンドウを作成し、フォームを表示させます
  // 一つ目の子ウィンドウ
 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")



参照 


CALL WORKER

 
プロパティ 

プロダクト: 4D
テーマ: フォーム
番号: 1391

This command can be run in preemptive processes

 
履歴 

初出: 4D v15 R5

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)