ON EVENT CALL

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 3


ON EVENT CALL (eventMethod{; processName})

引数説明
eventMethod文字列発動されるイベントメソッド, または
空の文字の場合イベントの遮断を停止
processName文字列プロセス名

説明

ON EVENT CALL コマンドは、イベントを検知するメソッドであるeventMethodをインストールします。このメソッドは、イベント処理メソッドまたはイベントキャッチメソッドと呼ばれます。

Tip: このコマンドの使用には、上級のプログラミング知識が必要です。通常、イベントを用いて作業を実行する際に、ON EVENT CALLコマンドを使用する必要はありません。フォームの使用において、イベントは4Dによって管理され、適切なフォームやオブジェクトにイベントが送信されます。

Tip: GET MOUSEShift 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。これらの変数がプロセス変数であるという点に注意してください。したがって、変数のスコープはイベント処理プロセス内です。別のプロセスでこれらの値が必要な場合、インタープロセス変数へコピーしてください。

・システム変数MouseDownには、イベントがマウスクリックである場合には1が、それ以外の場合には0が代入されます。

・システム変数KeyCodeには、押されたキーのコードが代入されます。この変数は文字コードまたはファンクションキーコードを返します。これらのコードはUNICODE コードASCII コード (さらにそのサブセクション)、およびファンクションキーコードの節にリストがあります。4Dは主要な文字コードとファンクションキーコードにたいして定義済みの定数があります。エクスプローラウィンドウでこれらの定数のテーマを参照してください。

・システム変数Modifiersには、モデファイアキーの値が入ります。システム変数Modifiersはイベントが発生した時点で、次のモディファイアキーが押されていたかどうかを示します:

プラットフォームモディファイア
WindowsShift キー, Caps Lock, Alt キー, Ctrl キー, 右マウスボタン
MacintoshShift キー, Caps Lock, Option キー, Command キー, Control キー

Notes

- WindowsのALTキーは、MacintoshのOptionキーに相当します。

- WindowsのCtrlキーは、MacintoshのCommandキーに相当します。

- MacintoshのControlキーは、Windowsには対応するキーはありませんが、MaciontoshのControl+マウスクリックは、Windowsのマウス右クリックに相当します。

モディファイアキーでは、イベントは発生しません。マウスボタンをクリック、あるいは他のキーが押されなければなりません。Modifiersは4バイトの倍長整数変数で、32ビットの配列としてとらえる必要があります。各モディファイアキーに対応するビットを判定するために、4Dにはビット位置やビットマスクを示す定数があらかじめ定義されています。例えば、イベントに対してshiftキーが押されたかどうかを調べるには、次のようにします:

   If (Modifiers ?? Shift key bit ) ` Shiftキーが押されたか

または:

   If ((Modifiers & Shift key mask)#0)` Shiftキーが押されたか

Note: Windowsでは、Modifiersとして128が使用でき、イベント生成時にマウスの左ボタンがリリースされたことを示します。

・システム変数MouseXMouseYには、マウスがクリックされた時の座標位置が入ります。この位置は、クリックが発生したウインドウのローカル座標システムを用いて表現されます。ウインドウの左上隅の位置が0.0です。これらはマウスクリックした場合にのみ有効です。

・システム変数MouseProcには、イベントが発生した(マウスクリック)プロセスのプロセス参照番号が入ります。

重要: システム変数MouseDown, KeyCode, Modifiers, MouseX, MouseY, そして MouseProcには、ON EVENT CALLコマンドでインストールされたイベント処理メソッド内でのみ意味を持つ値が納められます。

例題

次の例は、ユーザが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 if

Ctrl+ピリオドが押されると、イベント処理メソッド内で<>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が使用されている点に注意してください。これは、ForループでPAGE SETUPPRINT FORMPAGE BREAKコマンドを使い、特別な印刷用レポートを生成しているためです。

PRINT SELECTIONコマンドを使ってレポートを印刷する場合、ユーザに印刷を中断させるようなイベント処理を実行する必要はありません。この処理はPRINT SELECTIONコマンドにより自動的に行われます。

参照

FILTER EVENT, GET MOUSE, Method called on event, Shift down.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次