WR ON EVENTコマンドは、area内でevent で指定されたイベントが発生したときに呼び出されるメソッドとしてmethod をインストールします。イベントは4D Write で処理される前に直接メソッドに渡されます。
area が0 の場合、method は、データベースが閉じられるまで、すべての4D Writeエリアに対するデフォルトのイベントメソッドとなります。エリアに特定のイベントメソッドがインストールされている場合、そのメソッドがデフォルトメソッドに代わって呼び出されます。
event引数には傍受するイベントを表す値を渡します。
WR Eventsテーマの以下の定数を渡せます:
定数 |
型 |
値 |
コメント |
wr on key |
倍長整数 |
0 |
キーが押された (矢印キーやリターン等を含む) |
wr on double click |
倍長整数 |
1 |
ダブルクリック |
wr on single click |
倍長整数 |
2 |
シングルクリック |
wr on triple click |
倍長整数 |
3 |
3回クリック |
wr on right click |
倍長整数 |
4 |
右マウスボタンのクリック |
wr on activate |
倍長整数 |
5 |
4D Writeエリアがアクティブまたは非アクティブになった |
wr on printing |
倍長整数 |
7 |
ドキュメント印刷中 |
wr on ruler |
倍長整数 |
8 |
ルーラの変更 |
wr on compute references |
倍長整数 |
9 |
動的参照が更新された |
wr on close |
倍長整数 |
10 |
4D Writeエリアまたはウィンドウが閉じられた |
wr on drag |
倍長整数 |
11 |
オブジェクトがドラッグされた |
wr on drop |
倍長整数 |
12 |
オブジェクトがドロップされた |
wr on timer |
倍長整数 |
13 |
タイマーサイクルの終了 |
すべてのイベントに対しmethodを有効にするには、eventに-1を渡します。
method は呼び出されるときに、イベント発生時のエリアのステータスを表す7つの引数を受け取ります。コンパイルコマンドを使用して、これらの引数を宣言する必要があります。次の表は、methodが受け取る引数の説明です:
引数 | 型 | 説明 |
$1 | 倍長整数 | 4D Writeエリア |
$2 | 整数 | Shiftキー |
$3 | 整数 | Alt (Windows), Option (Mac OS) |
$4 | 整数 | Ctrl (Windows), Command (Mac OS) |
$5 | 整数 | イベントタイプ |
$6 | 整数 | イベントタイプにより異なる |
$0 | 倍長整数 | メソッドが値を返す場合 |
$1にはイベントが発生したエリアのIDが渡されます。$2, $3, そして$4にはイベント発生時にモディファイアキーが押されていたかどうかを示す値が渡されます。値が0の場合、キーは押されていません。値が1の場合、キーは押されています。$5にはイベントタイプが渡されます。$6はイベントのタイプにより異なります。
メソッド変数とevent引数 ($6)
- event=0の場合、$6にはイベントを呼び出したキーのコードが渡されます。
- event=1または2の場合、$6は参照がシングルまたはダブルクリックされたことを示します。$6=0のとき、参照は選択されていません。$6=1のとき、参照は選択されています。
Note: 以下のいずれかのアクションが実行された場合、methodはクリックを管理する前に呼び出されることがあります:
- 参照 (ハイパーテキストリンク、4DまたはHTML式) をシングルまたはダブルクリックした。
- 右クリック (Windows) または Control-クリック (Mac OS)。Mac OSでは、クリック時にControlキーを押すとポップアップメニューが表示されます。
Windowsでは右クリックを行うドロップダウンメニューが表示されます。両ケースともデータベースフィールドを表示します。互換性のためにイベント4 (wr on right click) の利用をお勧めします。
- event=3の場合、$6は段落の選択に関連します。ダブルクリックで呼び出されるイベントメソッドがインストールされておらず、これが$0:=1で傍受されていない場合、トリプルクリックが参照上で行われることがあります。この場合、$6に意味はありません。
- event=4の場合、$6は (クリックされた場所に基づく) 表示されようとしているコンテキストメニューのタイプを示します:
- $6=1の場合、タイプ1のコンテキストメニュー (ヘッダー/フッター内のクリック) が表示されます。
- $6=2の場合、タイプ2のコンテキストメニュー (ボディエリアのテキスト内のクリック) が表示されます。
- $6=3の場合、タイプ3のコンテキストメニュー (ボディエリアのピクチャのクリック) が表示されます。
- event=5の場合、$6はエリアがアクティブか非アクティブかを示します。$6=0の場合、4D Writeエリアは非アクティブです。$6=1の場合、4D Writeエリアはアクティブです。
- event=7でプリントジョブが差し込み印刷の場合、$6は使用されているテーブル番号を示します。プリントジョブが差し込み印刷でない場合、$6は0となります。
- event=8の場合 (ルーラー上でアクションが行われた)、$6は意味のある値を返しません。ルーラー上のアクションを許可したくない場合、$0に1を設定します。
- event=9の場合、$6はドキュメント内でどこのマージンがリセットされたかを示します。$6=0の場合、マージンはボディ内でリセットされました。$6=1の場合、マージンはヘッダでリセットされました。$6=2の場合、マージンはフッタでリセットされました。
- event=13の場合、ユーザーアクションに関わらず、methodが自動でXtick毎に呼び出されます (1 tick = 1/60秒)。タイマーは特に編集中のドキュメントを自動でバックアップするセキュリティメカニズムを実装するために使用されます。デフォルトでタイマーは3600 tick (60秒) 毎にイベントを生成します。この周期はWR SET AREA PROPERTYコマンドを使用して変更できます。メソッドは繰り返し実行されるため、アプリケーションを遅くしないよう、methodが時間のかかる処理を行わないようにしなければなりません。
イベントをフィルタするには
methodを関数として使用し、0または1を返します。これにより、4D Writeで特定の文字を無視するようにすることができます。
$0に1を設定すると、メソッドは特定のイベントをトラップします。$0を0に設定するとイベントはトラップされません。例えば、ドキュメント中に"@"を入力させたくない場合、ドキュメント中に現れるすべての文字をフィルタします。$6変数が“@”の文字コードと同じであれば、$0に1を設定します。
Note: すべての文字をフィルタすると、キーが押されるたびにメソッドが実行されるため、動作は遅くなります。
以下の例題では、イベントのタイプに基づきアクションを実行します:
フォームメソッド:
ProcName メソッド: