| 4D v13.4ON EVENT CALL | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v13.4
 ON EVENT CALL 
         | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ON EVENT CALL ( eventMethod {; processName} ) | ||||||||
| 引数 | 型 | 説明 | ||||||
| eventMethod | 文字 |   | 発動されるイベントメソッド, または 空の文字の場合イベントの遮断を停止 | |||||
| processName | 文字 |   | プロセス名 | |||||
ON EVENT CALL コマンドは、イベントを検知するメソッドであるeventMethodをインストールします。このメソッドは、イベント処理メソッドまたはイベントキャッチメソッドと呼ばれます。
Tip: このコマンドの使用には、上級のプログラミング知識が必要です。通常、イベントを用いて作業を実行する際に、ON EVENT CALLコマンドを使用する必要はありません。フォームの使用において、イベントは4Dによって管理され、適切なフォームやオブジェクトにイベントが送信されます。
Tip: GET MOUSEやShift down等のコマンドを使用して、イベントに関する情報を取得できます。これらのコマンドをオブジェクトメソッドでコールし、オブジェクトに関連するイベントについての必要な情報を取得することができます。これらのコマンドにより、ON EVENT CALLコマンドをもとにしたアルゴリズムを作成する必要がなくなります。
このコマンドのスコープは、現在の作業セッションです。デフォルトで、別々のローカルプロセス内でメソッドが実行されます。いちどに1つのイベント処理メソッドだけを使用できます。メソッドを用いたイベントの検知を中止するには、eventMethodに空の文字列を指定して再度ON EVENT CALLコマンドをコールします。
イベント管理メソッドは別プロセスとして実行されるため、4Dメソッドが1つも実行されなくても、常にアクティブになります。インストール後はイベントが発生するたびに4Dがイベント処理メソッドを呼び出します。管理できるイベントは、マウスボタンのクリックとキーボードからの入力です。
オプションのprocessName引数は、ON EVENT CALLコマンドで作成されるプロセスの名前です。processNameの先頭にドル記号 ($) を付けるとローカルプロセスが開始されます。通常はこのローカルプロセスを使用します。processName引数を省略した場合、デフォルトで4Dは$Event Managerという名前のプロセスを作成します。
警告: イベント処理メソッドで実行する処理については十分注意してください。イベントを発生させるコマンドはコールしないでください。このようなコマンドをコールした場合、イベント処理メソッドの実行から抜けるのが非常に困難になります。Ctrl+Shift+Backspace(Windows)またはCommand-Shift-Option-Control-Backspace(Macintosh)キーにより、イベント管理プロセスを通常のプロセスに切り替えることができます。これによって、それ以降、発生するすべてのイベントは、イベント処理メソッドへ自動的には渡されなくなります。イベント管理が正常な動作ではなくなった場合に、この手法を利用して回復することが可能です。
イベント処理メソッドでは以下のシステム変数を読み取ることができます: MouseDown, KeyCode, Modifiers, MouseX, MouseY, そして MouseProc。これらの変数がプロセス変数であるという点に注意してください。したがって、変数のスコープはイベント処理プロセス内です。別のプロセスでこれらの値が必要な場合、インタープロセス変数へコピーしてください。
| プラットフォーム | モディファイア | 
| Windows | Shift キー, Caps Lock, Alt キー, Ctrl キー, 右マウスボタン | 
| Macintosh | Shift キー, Caps Lock, Option キー, Command キー, Control キー | 
Notes
モディファイアキーでは、イベントは発生しません。マウスボタンをクリック、あるいは他のキーが押されなければなりません。Modifiersは4バイトの倍長整数変数で、32ビットの配列としてとらえる必要があります。各モディファイアキーに対応するビットを判定するために、4Dにはビット位置やビットマスクを示す定数があらかじめ定義されています。例えば、イベントに対してshiftキーが押されたかどうかを調べるには、次のようにします:
 If(Modifiers?? Shift key bit) ` Shiftキーが押されたかまたは:
 If((Modifiers & Shift key mask)#0) ` Shiftキーが押されたかNote: Windowsでは、Modifiersとして128が使用でき、イベント生成時にマウスの左ボタンがリリースされたことを示します。
次の例は、ユーザがCtrl+ピリオド(Windows)またはCommand+ピリオド(Macintosh)を押したら、印刷を中止します。ま ず、イベント処理メソッドをインストールします。次にユーザにメッセージを表示して、印刷を中止できることを知らせます。イベント処理メソッド内でイン タープロセス変数<>vbWeStopにTrueが代入されると、既に印刷されたレコードの数をユーザに知らせます。最後にイベント処理メソッドをクリアします:
 PAGE SETUP
 If(OK=1)
    <>vbWeStop:=False
    ON EVENT CALL("EVENT HANDLER") ` イベント処理メソッドをインストール
    ALL RECORDS([People])
    MESSAGE("中断するにはCtrl+ピリオドを押す")
    $vlNbRecords:=Records in selection([People])
    For($vlRecord;1;$vlNbRecords)
       If(<>vbWeStop)
          ALERT("Printing cancelled at record "+String($vlRecord)+" of "+String($vlNbRecords))
          $vlRecord:=$vlNbRecords+1
       Else
          Print form([People];"Special Report")
       End if
    End for
    PAGE BREAK
    ON EVENT CALL("") ` イベント処理メソッドをアンインストール
 End ifCtrl+ピリオドが押されると、イベント処理メソッド内で<>vbWeStopがTrueに設定されます:
  ` EVENT HANDLER project method
 If((Modifiers?? Command key bit) & (KeyCode=Period))
    CONFIRM("Are you sure?")
    If(OK=1)
       <>vbWeStop:=True
       FILTER EVENT ` この呼び出しを忘れないでください。そうでないと、4Dもこのイベントを受け取ります
    End if
 End ifこの例題では、ON EVENT CALLが使用されている点に注意してください。これは、ループでPAGE SETUP、PRINT FORM、PAGE BREAKコマンドを使い、特別な印刷用レポートを生成しているためです。
PRINT SELECTIONコマンドを使ってレポートを印刷する場合、ユーザに印刷を中断させるようなイベント処理を実行する必要はありません。この処理はPRINT SELECTIONコマンドにより自動的に行われます。
	プロダクト: 4D
	テーマ: 割込
	番号: 
        190
        
        
        
	
        
         
        
	初出: < 4D v6
FILTER EVENT
GET MOUSE
Method called on event
Shift down