version 11.2 (Modified)
Form event 数値
| 引数 | 型 | 説明 | ||||
| このコマンドには、引数はありません。 | ||||||
| 戻り値 | 数値 | フォームイベント番号 | ||||
説明
Form eventコマンドは、現在生成中のフォームイベントタイプを示す数値を返します。通常フォームやオブジェクトメソッド内でForm event関数を使用します。
4D には事前に“Form Events”テーマで定義された定数が用意されており、Form eventから返される値と比較することができます。
イベントには、一般的なイベント(任意のタイプのオブジェクトに対して生成される)と、特定タイプのオブジェクトのみに発生するイベントがあります。
一般的なイベント
次のイベントは任意のフォームまたはオブジェクトに対して生成されます。:
| 定数 | 値 | 説明 |
| On Load | 1 | フォームが表示または印刷されようとしている |
| On Unload | 24 | フォームを閉じる、あるいは解放しようとしている |
| On Validate | 3 | レコードのデータ入力が検証された |
| On Clicked | 4 | オブジェクト上でクリックされた |
| On Double Clicked | 13 | オブジェクト上でダブルクリックされた |
| On Before Keystroke | 17 | フォーカスのあるオブジェクトに文字が入力されようとしている |
| Get edited text はこの文字を含まないオブジェクトのテキストを返す | ||
| On After Keystroke | 28 | フォーカスのあるオブジェクトに文字が入力されようとしている |
| Get edited text はこの文字を含むオブジェクトのテキストを返す | ||
| On After Edit | 45 | フォーカスのあるオブジェクトの内容が更新された |
| On Getting Focus | 15 | フォームオブジェクトがフォーカスを得た |
| On Losing Focus | 14 | フォームオブジェクトがフォーカスを失った |
| On Activate | 11 | フォームウィンドウが最前面のウィンドウになった |
| On Deactivate | 12 | フォームウィンドウが最前面のウィンドウでなくなった |
| On Outside Call | 10 | フォームがCALL PROCESSによる呼び出しを受けた |
| On Drop | 16 | データがオブジェクトにドロップされた |
| On Drag Over | 21 | データがオブジェクト上にドロップされる可能性がある |
| On Begin Drag Over | 46 | オブジェクトがドラッグされている |
| On Mouse Enter | 35 | マウスカーソルがオブジェクトの描画エリア内に入った |
| On Mouse Move | 37 | マウスカーソルがオブジェクトの描画エリア上で (最低1ピクセル) 動いた |
| On Mouse Leave | 36 | マウスカーソルがオブジェクトの描画エリアから出た |
| On Menu Selected | 18 | メニュー項目が選択された |
| On Data Change | 20 | オブジェクトのデータが変更された |
| On Plug in Area | 19 | 外部オブジェクトのオブジェクトメソッドの実行がリクエストされた |
| On Header | 5 | フォームのヘッダエリアが印刷あるいは表示されようとしている |
| On Printing Detail | 23 | フォームの詳細エリアが印刷されようとしている |
| On Printing Break | 6 | フォームのブレークエリアのひとつが印刷されようとしている |
| On Printing Footer | 7 | フォームのフッタエリアが印刷されようとしている |
| On Close Box | 22 | ウィンドウのクローズボックスがクリックされた |
| On Display Detail | 8 | レコードがリスト中に表示されようとしている |
| On Open Detail | 25 | レコードがダブルクリックされて、入力フォームを開こうとしている |
| On Close Detail | 26 | 入力フォームから離れ、出力フォームに移動しようとしている |
| On Selection Change | 31 | ・リストボックス: 現在の行や列の選択が変更された |
| ・リスト中のレコード: リストフォームまたはサブフォームにおいて、カレントレコードあるいはカレントセレクションの行選択が変更された | ||
| ・階層リスト: リスト中の選択がクリックやキーストロークなどで変更された | ||
| On Load Record | 40 | リスト更新中、更新中にレコードがロードされた (ユーザがレコード行をクリックし、フィールドが編集モードになった) |
| On Timer | 27 | SET TIMER コマンドで設定した時間が経過した |
| On Resize | 29 | フォームウィンドウがリサイズされた |
List box
以下のイベントはリストボックスでのみ生成されます:
| 定数 | 値 | 説明 |
| On Before Data Entry | 41 | リストボックスセルが編集モードに変更されようとしている |
| On Column Moved | 32 | リストボックスの列がユーザのドラッグ&ドロップで移動された |
| On Row Moved | 34 | リストボックスの行がユーザのドラッグ&ドロップで移動された |
| On Column Resize | 33 | リストボックスの列幅が変更された |
| On Header Click | 42 | リストボックスの列ヘッダでクリックが行われた |
| On After Sort | 30 | リストボックスの列中で標準のソートが行われた |
3D ボタン
以下のイベントは3D ボタンでのみ生成されます:
| 定数 | 値 | 説明 |
| On Long Click | 39 | 3D ボタンがクリックされ、特定の時間以上マウスボタンが押され続けている |
| On Arrow Click | 38 | 3D ボタンの“三角” エリアがクリックされた |
階層リスト
以下のイベントは階層リストでのみ生成されます:
| 定数 | 値 | 説明 |
| On Expand | 43 | クリックやキーストロークで階層リストの要素が展開された |
| On Collapse | 44 | クリックやキーストロークで階層リストの要素が折りたためられた |
Web エリア
以下のイベントはWeb エリアでのみ生成されます:
| 定数 | 値 | 説明 |
| On URL Resource Loading | 48 | 新しいリソースがWeb エリアにロードされた |
| On Begin URL Loading | 47 | 新しいURLがWeb エリアにロードされた |
| On URL Loading Error | 50 | URLをロード中にエラーが発生した |
| On URL Filtering | 51 | Web エリアがURLをブロックした |
| On End URL Loading | 49 | URLのすべてのリソースがロードされた |
| On Open External Link | 52 | 外部URLがブラウザで開かれた |
| On Window Opening Denied | 53 | ポップアップウィンドウがブロックされた |
Note: 出力フォーム用のイベントはプロジェクトフォームで使用できません。これにはOn Display Detail, On Open Detail, On Close Detail, On Load Record, On Header, On Printing Detail, On Printing Break, On Printing Footerが含まれます。
イベントとメソッド
フォームイベントが発生すると、4Dは以下のアクションを行います:
・まず4Dはフォーム中のオブジェクトをブラウズし、発生したオブジェクトイベントがプロパティで選択されているすべてのオブジェクトのオブジェクトメソッドを呼び出します。
・次に、発生したイベントに対応するフォームイベントがプロパティで選択されていれば、フォームメソッドを呼び出します。
オブジェクトメソッドが特定の順序で呼び出されることを期待することはできません。おおざっぱに言って、オブジェクトメソッドは常にフォームメソッドよりも前に呼び出されます。オブジェクトがサブフォームの場合、サブフォームリストフォームのオブジェクトメソッドが呼び出され、次にリストフォームのフォームメソッドが呼び出されます。そして4Dは引き続き、親フォームのオブジェクトメソッドを呼び出します。言い換えれば、オブジェクトがサブフォームの時、4Dはサブフォームオブジェクト内で、オブジェクトとフォームメソッドの関係と同じルールを適用します。
On Load と On Unload イベントを除き、発生したイベントがフォームイベントプロパティで選択されていなかったとしても、オブジェクトプロパティで選択されていればそのオブジェクトメソッドの呼び出しが妨げられることはありません。言い換えれば、フォームレベルでイベントを有効あるいは無効にしても、オブジェクトイベントプロパティには影響ありません。
1つのイベントに関連するオブジェクトの数は、イベントの性質により異なります:
・On Load イベント - On Loadオブジェクトイベントプロパティが選択されている、フォームのすべてのページのすべてのオブジェクトのオブジェクトメソッドが呼び出されます。そしてフォームメソッドが呼び出されます。
・On Activate や On Resize イベント - これらのイベントは個々のオブジェクトには適用されず、フォームに適用されるため、オブジェクトメソッドは呼び出されません。ゆえに、On Activate フォームイベントプロパティが選択されてれば、そのフォームメソッドのみが呼び出されます。
・On Timer イベント - このイベントは事前にSET TIMER コマンドが使用された場合にのみ生成されます。On Timer フォームイベントプロパティが選択されていると、フォームメソッドのみがイベントを受け取ります。オブジェクトメソッドは呼び出されません。
・On Drag Over イベント - "ドロップ可"プロパティが選択されていれば、イベント中で関連するドロップ可能なオブジェクトのみオブジェクトメソッドが呼び出されます。フォームメソッドは呼び出されません。
・逆にOn Begin Drag Overイベントについては、ドラッグされているオブジェクトのオブジェクトメソッドやフォームメソッドが呼び出されます ("ドラッグ可"プロパティが選択されていれば)。
警告: 他のすべてのイベントと異なり、On Begin Drag Over や On Drag over イベント中、呼び出されるメソッドは、ドラッグ&ドロップソースオブジェクトのプロセスのコンテキストで実行されます。ドラッグ&ドロップ先のオブジェクトではありません。詳細はドラック&ドロップ の節を参照してください。
・フォームのOn Mouse Enter, On Mouse Move および On Mouse Leave イベントが選択されていると、これらのイベントはフォームオブジェクトごとに生成されます。これらがオブジェクトで有効にされている場合、イベントはこのオブジェクトに対してのみ生成されます。多層構造のオブジェクトの場合、上位レベルから下位レベルに向けてそのイベントを処理できるオブジェクトを探し、最初に見つかったオブジェクトによりイベントが生成されます。SET VISIBLE コマンドを使用して非表示にされたオブジェクトでは、これらのイベントは生成されません。オブジェクト入力中、他のオブジェクトはマウスの位置によりこのタイプのイベントを受け取るかもしれません。
・リスト中のレコード: MODIFY SELECTION / DISPLAY SELECTIONで表示されるリストフォームやサブフォームでメソッドやフォームイベントが呼び出される順序は以下のとおりです:
ヘッダエリアのそれぞれのオブジェクトごとに: On Header イベントのオブジェクトメソッド On Header イベントのフォームメソッド レコードごとに: 詳細エリアのオブジェクトごとに: On Display Detail イベントのオブジェクトメソッド On Display Detail イベントのフォームメソッド
On Display Detail や On Headerイベントでダイアログボックスを表示する4Dコマンドを呼び出すことはできません。これはシンタックスエラーを起こします。
以下のコマンドが関連します: ALERT, DIALOG, CONFIRM, Request, ADD RECORD, MODIFY RECORD, DISPLAY SELECTION そしてMODIFY SELECTION.
以下の表はそれぞれのイベントごとにどのようにオブジェクトメソッドとフォームメソッドが呼ばれるかを概説します:
| イベント | オブジェクトメソッド | フォームメソッド | オブジェクト |
| On Load | ○ | ○ | すべてのオブジェクト |
| On Unload | ○ | ○ | すべてのオブジェクト |
| On Validate | ○ | ○ | すべてのオブジェクト |
| On Clicked | ○ (クリック可能なら) (*) | ○ | 関係するオブジェクトのみ |
| On Double Clicked | ○ (クリック可能なら) (*) | ○ | 関係するオブジェクトのみ |
| On Before Keystroke | ○ (キーボード入力可能なら) (*) | ○ | 関係するオブジェクトのみ |
| On After Keystroke | ○ (キーボード入力可能なら) (*) | ○ | 関係するオブジェクトのみ |
| On After Edit | ○ (入力可能なら) (*) | ○ | 関係するオブジェクトのみ |
| On Getting Focus | ○ (フォーカス可なら) (*) | ○ | 関係するオブジェクトのみ |
| On Losing Focus | ○ (フォーカス可なら) (*) | ○ | 関係するオブジェクトのみ |
| On Activate | × | ○ | なし |
| On Deactivate | × | ○ | なし |
| On Outside Call | × | ○ | なし |
| Sur debut glisser | ○ (ドラッグ可なら) (**) | ○ | 関係するオブジェクトのみ |
| On Drop | ○ (ドロップ可なら) (**) | ○ | 関係するオブジェクトのみ |
| On Drag Over | ○ (ドロップ可なら) (**) | × | 関係するオブジェクトのみ |
| On Mouse Enter | ○ | ○ | すべてのオブジェクト |
| On Mouse Move | ○ | ○ | すべてのオブジェクト |
| On Mouse Leave | ○ | ○ | すべてのオブジェクト |
| On Menu Selected | × | ○ | なし |
| On Data Change | ○ (更新可なら) (*) | ○ | 関係するオブジェクトのみ |
| On Plug in Area | ○ | ○ | 関係するオブジェクトのみ |
| On Header | ○ | ○ | すべてのオブジェクト |
| On Printing Detail | ○ | ○ | すべてのオブジェクト |
| On Printing Break | ○ | ○ | すべてのオブジェクト |
| On Printing Footer | ○ | ○ | すべてのオブジェクト |
| On Close Box | × | ○ | なし |
| On Display Detail | ○ | ○ | すべてのオブジェクト |
| On Open Detail | × | ○ | なし |
| On Close Detail | × | ○ | なし |
| On Resize | × | ○ | なし |
| On Selection Change | ○ (***) | ○ | 関係するオブジェクトのみ |
| On Load Record | × | ○ | なし |
| On Timer | × | ○ | なし |
| On Before Data Entry | ○ (リストボックス) | × | 関係するオブジェクトのみ |
| On Column Moved | ○ (リストボックス) | × | 関係するオブジェクトのみ |
| On Row Moved | ○ (リストボックス) | × | 関係するオブジェクトのみ |
| On Column Resize | ○ (リストボックス) | × | 関係するオブジェクトのみ |
| On Header Click | ○ (リストボックス) | × | 関係するオブジェクトのみ |
| On After Sort | ○ (リストボックス) | × | 関係するオブジェクトのみ |
| On Long Click | ○ (3D ボタン) | ○ | 関係するオブジェクトのみ |
| On Arrow Click | ○ (3D ボタン) | ○ | 関係するオブジェクトのみ |
| On Expand | ○ (階層リスト) | × | 関係するオブジェクトのみ |
| On Collapse | ○ (階層リスト) | × | 関係するオブジェクトのみ |
| On URL Resource Loading | ○ (Web エリア) | × | 関係するオブジェクトのみ |
| On Begin URL Loading | ○ (Web エリア) | × | 関係するオブジェクトのみ |
| On URL Loading Error | ○ (Web エリア) | × | 関係するオブジェクトのみ |
| On URL Filtering | ○ (Web エリア) | × | 関係するオブジェクトのみ |
| On End URL Loading | ○ (Web Area) | × | 関係するオブジェクトのみ |
| On Open External Link | ○ (Web Area) | × | 関係するオブジェクトのみ |
| On Window Opening Denied | ○ (Web Area) | × | 関係するオブジェクトのみ |
(*) 詳細は後述の "イベント、オブジェクト、プロパティ" を参照
(**) 詳細は "ドラッグ&ドロップ" の節を参照
(***) リストボックス、階層リスト、サブフォーム型のオブジェクトのみがこのイベントをサポートします
重要: イベントに対応するプロパティが選択されている場合にのみ、フォームやオブジェクトのメソッドが呼び出されることに留意してください。デザインモードのフォームエディタのプロパティリストでイベントを無効にすると、メソッドが呼び出される回数を減らすことができ、フォームの実行速度を最適化できます。
警告: オブジェクトのOn Load と On Unload イベントが生成されるには、オブジェクトとオブジェクトが属するフォームの両方で有効にされていなければなりません。オブジェクトのみでイベントが有効になっている場合、イベントは生成されません。これら2つのイベントはフォームレベルでも有効にされていなければなりません。
イベント、オブジェクト、プロパティ
イベントの性質やプロパティに基づき、オブジェクトに対してイベントが生成されるとオブジェクトメソッドが呼び出されます。ここでは、さまざまなタイプのオブジェクトを扱うにあたり、一般的に使用されるイベントについて詳細に説明します。
フォームエディタのプロパティリストには、選択されたオブジェクトあるいはフォームで利用可能なイベントのみが表示されることに留意してください。
クリック可能なオブジェクト
クリック可能なオブジェクトは主にマウスで操作します。以下のオブジェクトが含まれます:
・ブールの入力可能フィールド/変数
・ボタン, デフォルトボタン, ラジオボタン, チェックボックス, ボタングリッド
・3D ボタン, 3D ラジオボタン, 3D チェックボックス
・ポップアップpメニュー, 階層ポップアップメニュー, ピクチャメニュー
・ドロップダウンリスト, メニュー/ドロップダウンリスト
・スクロールエリア, 階層リスト, リストボックス
・非表示ボタン, ハイライトボタン, ラジオピクチャ
・サーモメータ, ルーラ, ダイアル (スライダオブジェクト)
・タブコントロール
・スプリッタ
On Clicked や On Double Clicked オブジェクトイベントプロパティを選択したのち、Form event コマンドを使用してオブジェクト上でのクリックを検知し処理することができます。Form event コマンドはユーザアクションに応じ、On Clicked または On Double Clickedを返します。
両イベントがオブジェクトに対し選択されている場合、ダブルクリックが行われるとまずOn Clicked が、そしてOn Double Clicked イベントが生成されます。
これらすべてのオブジェクトにおいて、On Clickedイベントはマウスボタンが離されたときに生成されます。しかしいくつか例外があります:
・非表示ボタン - マウスがクリックされると、ボタンが離されるのを待たずにOn Clickedイベントが生成されます。
・スライダオブジェクト (サーモメータ, ルーラ, ダイアル) - 表示フォーマットでコントロールをスライド中にオブジェクトメソッドが呼び出されるように設定されていると、On Clickedイベントはクリックが行われるとすぐに生成されます。
Note: いくつかのオブジェクトはキーボードからも操作可能です。例えばチェックボックスがフォーカスを得ると、スペースバーでオン/オフを切り替えることができます。この場合でもOn Clickedイベントは生成されます。
警告: コンボボックスはクリック可能なオブジェクトとしては扱われません。コンボボックスは入力可能なテキストエリアとして扱われ、割り当てられたドロップダウンリストにはデフォルト値が提供されます。コンボボックスの処理はOn Before Keystroke, On After Keystroke そして On Data Change イベントを使用して行います。
キーボードから入力可能なオブジェクト
キーボードから入力可能なオブジェクトとは、キーボードを使用してデータを入力できるオブジェクトです。これらのオブジェクトではOn After Edit, On Before KeystrokeそしてOn After Keystrokeイベントを検知し、Get edited text コマンドを使用して、低レベルでデータ入力をフィルタできます。
キーボード入力可能なオブジェクトやデータタイプには以下が含まれます:
・文字、テキスト、日付、時間、数値、そしてピクチャ(On After Edit のみ) など、すべての入力可能なフィールドオブジェクト
・文字、テキスト、日付、時間、数値、そしてピクチャ(On After Edit のみ) など、すべての入力可能な変数
・コンボボックス
・リストボックス
Note: 階層リストは入力可能なオブジェクトですが、このオブジェクトではOn After Edit, On Before KeystrokeそしてOn After Keystrokeは管理されません (後述の “階層リスト” の段落を参照)。
・On Before Keystroke と On After Keystroke
Note: 4Dのバージョン2004.2より、On After Keystrokeイベントは一般的にOn After Editに置き換えます。
On Before Keystroke と On After Keystroke イベントプロパティを選択したら、Form event コマンドを使用して返されるOn Before KeystrokeとOn After Keystrokeイベントを検知し、オブジェクトへのキーストロークを処理できます (詳細は Get edited text コマンドの説明を参照してください。これらのイベントはPOST KEYのようなユーザアクションをシミュレートするコマンドによっても生成されます。
キーボードを使用せず、ペーストやドラッグ&ドロップなどで行われた変更は考慮されないことに留意してください。これらのイベントを処理するためにはOn After Editを使用します。
Note: On Before KeystrokeとOn After Keystroke イベントは入力メソッド (IME) 使用時は生成されません。入力メソッドはプログラムあるいはシステムコンポーネントで、日本語や中国語など特定の文字や記号を入力するために使用されます。
・On After Edit
このイベントは、変更が行われた方法には関係なく、入力可能オブジェクトの内容に変更が行われるたびに生成されます。例えば:
- ペーストやカット、削除、キャンセルなどの標準の編集アクション
- 値のドロップ (ペーストと同様のアクション)
- ユーザが行ったキーボードからの入力。この場合On After EditイベントはOn Before KeystrokeとOn After Keystrokeイベントの後に生成されます。
- ユーザアクションをシミュレートするランゲージコマンドを使用した変更 (例 POST KEY)。
以下のアクションはこのイベントを生成させないことに注意してください:
- コピーやすべてのを選択のような、内容を変更しない編集アクション;
- 値のドラッグ (コピーに該当するアクション);
- プログラムにより行われた内容の変更、ただしユーザアクションをシミュレートするコマンドを除く。
このイベントはユーザアクションをコントロールするために使用できます。例えば長すぎるテキストのペーストや特定の文字のブロック、パスワードフィールドに対するカットを防ぐなどです。
変更可能オブジェクト
更新可能オブジェクトは、マウスやキーボードを使用して値を変更することのできるデータソースを持ちます。これらはOn Clickedイベントで処理されるユーザインタフェースコントロールとしては扱われません。以下が含まれます:
・すべての入力可フィールドオブジェクト (サブテーブルとBlobを除く)
・すべての入力可変数 (Blob、ポインタ、配列を除く)
・コンボボックス
・外部オブジェクト (完全なデータ入力が許可されるプラグイン)
・階層リスト
・リストボックス
これらのオブジェクトはOn Data Changeイベントを受け取ります。On Data Changeオブジェクトイベントプロパティが選択されると、Form event コマンドから返されるOn Data Changeによりイベントを検知し、データソース値の変更を処理できます。イベントは、オブジェクトに結び付けられた変数が4Dにより内部的に更新され次第、生成されます (例えば、一般的に入力エリアオブジェクトがフォーカスを失った時)。
タブ可オブジェクト
タブ可オブジェクトは、タブキーやクリックによりフォーカスを得るオブジェクトです。フォーカスを持つオブジェクトは、メニューやボタンへのモディファイアではない (キーボードでタイプされた) 文字を受け取ります。
以下を除き、すべてのオブジェクトはタブ可です:
・入力不可フィールドや変数
・ボタングリッド
・3D ボタン, 3D ラジオボタン, 3D チェックボックス
・ポップアップメニュー, 階層ポップアップメニュー
・メニュー/ドロップダウンリスト
・ピクチャメニュー
・スクロールエリア
・非表示ボタン, ハイライトボタン, ラジオピクチャボタン
・グラフ
・外部オブジェクト (完全なデータ入力が許可されるプラグイン)
・タブコントロール
・スプリッタ.
On Getting Focus や On losing Focus オブジェクトイベントプロパティを選択したら、Form event コマンドから返されるOn Getting Focus や On Losing Focusを検知して、フォーカスの変更を処理できます。
3D ボタン
3D を使用すると詳細にグラフィックインタフェースを設定できます (f3D ボタンに関する説明はDesign Referenceマニュアルを参照してください)。汎用のイベントに加え、これらのボタンを管理するために2つの追加のイベントを使用できます:
・On Long Click: このイベントは3D ボタンがクリックされ、一定時間以上マウスボタンが押され続けていると生成されます。理論上、このイベントが生成されるためのクリック保持時間は、システムの環境設定に設定されたダブルクリックの間隔最大時間に等しくなります。
このイベントはすべての3D ボタンスタイル、3D ラジオボタン、3D チェックボックスで生成されます。例外は、旧世代の3D ボタンであるバックグランドオフセットタイプと、ポップアップメニューが関連付けられた3D ボタンの矢印エリアです (後述)。
このイベントは一般的にロングクリック時にポップアップメニューを表示するために使用します。ユーザがロングクリックが有効になる時間前にマウスボタンを離すと、On Clickedが生成されます。
・On Arrow Click: いくつかの3D ボタンスタイルには、ポップアップメニューをリンクし、矢印を表示させることができます。この矢印をクリックすると、ボタンの主たるアクションに追加してアクションを提供するポップアップを表示します。
4DではOn Arrow Clickイベントを使用してこの動作を管理できます。このイベントはユーザが矢印をクリックすると、マウスボタンが押されてすぐに生成されます:
- ポップアップメニューが分離されている場合、このイベントはボタン中で矢印のあるエリアがクリックされた場合のみ生成されます。
- ポップアップメニューがリンクされている場合、このイベントはボタン上どこをクリックしても生成されます。このタイプのボタンではOn Long Clickイベントが生成されないことに注意してください。
なし, ツールバーボタン, べベル, 角の丸いべベルおよびOffice XPタイプの3D ボタンや、3D ラジオボタン、3D チェックボックスは“ポップアップメニューあり”プロパティをサポートします:
リストボックス
リストボックス特有の様々な機能を管理するために、7つのフォームイベントを使用できます:
・On Before Data Entry: このイベントは、リストボックス中のセルが編集される直前に生成されます (入力カーソルが表示される前)。このイベントを使用して、例えば表示中と編集中で異なるテキストを表示させることができます。
・On Selection Change: このイベントは、リストボックスの列や行の現在の選択が変更されるたびに生成されます。このイベントはレコードリストや階層リストでも生成されます。
・On Column Moved: このイベントは、ユーザのドラッグ&ドロップでリストボックスの列が移動されたときに生成されます。ただし元の場所にドロップされた場合には生成されません。MOVED LISTBOX COLUMN NUMBER コマンドは列の新しい位置を返します。
・On Row Moved: このイベントは、ユーザのドラッグ&ドロップでリストボックスの行が移動されたときに生成されます。ただし元の場所にドロップされた場合には生成されません。
・On Column Resize: このイベントは、リストボックス中の列幅が変更されたときに生成されます (マウスやSET LISTBOX COLUMN WIDTH コマンドを使用)。
・On Header Click: このイベントは、リストボックス中の列ヘッダでクリックが行われると生成されます。この場合、Self コマンドを使用すればクリックされた列ヘッダを知ることができます。右クリック (Windouws) やCtrl+クリック (Mac OS) を列や列ヘッダ上で行うと、On Clickedイベントが生成されます。
リストボックスで並び替え可プロパティが選択されている場合、$0に0または-1を渡して標準の並び替えを行うかどうか指定できます:
- $0 = 0の場合、標準の並び替えが行われます。
- $0 = -1の場合、標準の並び替えは行われず、ヘッダには並び替え矢印は表示されません。開発者は4Dの配列コマンドを使用して、カスタマイズされた条件に基づく並び替えを実行できます。
並び替え可 プロパティが選択されていない場合、$0は使用されません。
・On After Sort: このイベントは標準の並び替えが行われた直後に生成されます (On Header Clickイベントで$0に-1が返された場合には生成されません)。このメカニズムは、ユーザによって行われた最後の並び替えの方向を格納するために使用できます。このイベント内では、Self コマンドは、並び替えられた列変数へのポインタを返します。
階層リスト
汎用のイベントに加え、階層リスト上で行われるアクションを処理するために3つのイベントを使用できます:
・On Selection Change: このイベントは、マウスクリックやキーストロークで階層リスト中の選択が変更されるたびに生成されます。
このイベントはリストボックスやレコードリストでも生成されます。
・On Expand: このイベントは、マウスクリックやキーストロークで階層リストの要素が拡げられるたびに呼び出されます。
・On Collapse: このイベントは、マウスクリックやキーストロークで階層リストの要素が折りたたまれるたびに呼び出されます。
これらのイベントは相互に排他的ではなく、階層リスト中で連続して生成されることがあります:
- キーストロークに伴い (順に):
| イベント | コンテキスト | |
| On Data Change | 要素が編集された | |
| On Expand/On Collapse | -> または & | |
| On Selection Change | 新しい要素を選択した | |
| On Clicked | キーボードを使用してリストをアクティブにした |
- マウスクリックに伴い (順に):
| イベント | コンテキスト | |
| On Data Change | 要素が編集された | |
| On Expand/On Collapse | 拡げる/折りたたむアイコンを使用してを使用してサブリストを開いた/閉じた | |
| または | ||
| 編集不可サブリストをダブルクリックした | ||
| On Selection Change | 新しい要素を選択した | |
| On Clicked / On Double Clicked | クリックまたはダブルクリックでリストをアクティブにした |
Web エリア
Webエリアでは7つのイベントを利用できます:
・On Begin URL Loading: このイベントは、Webエリアに新しいURLのロードを開始した時に生成されます。Webエリアに関連付けられた"URL"変数を使用してロード中のURLを知ることができます。
Note: ロード中のURLは現在のURLとは異なります (WA Get current URL コマンドの説明参照)。
・On URL Resource Loading: このイベントは、現在のWebページに (ピクチャやフレームなど) 新しいリソースをロードするたびに生成されます。
Webエリアに関連付けられた"Progression"変数を使用してロード状況を知ることができます。
・On End URL Loading: このイベントは、現在のURLのすべてのリソースがロードされると生成されます。
WA Get current URL コマンドを使用して、ロードされたURLを知ることができます。
・On URL Loading Error: このイベントは、URLのロード中にエラーを検出すると生成されます。
WA GET LAST URL ERROR コマンドを使用して、エラーに関する情報を取得できます。
・On URL Filtering: このイベントは、WA SET URL FILTERS コマンドで設定されたフィルタにより、URLのロードがWebエリアによってブロックされると生成されます。
WA Get last filtered URL コマンドコマンドを使用してブロックされたURLを知ることができます。
・On Open External Link: このイベントは、WA SET EXTERNAL LINKS FILTERS コマンドで設定されたフィルタにより、URLのロードがWebエリアによってブロックされ、URLがカレントのシステムブラウザで開かれると生成されます。
WA Get last filtered URL コマンドコマンドを使用してブロックされたURLを知ることができます。
・On Window Opening Denied: このイベントは、Webエリアによりポップアップウィンドウがブロックされると生成されます。4D Web エリアはポップアップウィンドウを許可しません。
WA Get last filtered URL コマンドコマンドを使用してブロックされたURLを知ることができます。
例題
ここに示す例題はすべて、適切なイベントがプロパティで設定されていることを前提とします。
1. この例題では、[Parents] テーブルのフォームがスクリーンに表示されるよりも前に、サブテーブル[Parents]Childrenのサブレコードセレクションを並び替えます:
` [Parents] ーブルフォームメソッド Case of : (Form event=On Load) ORDER SUBRECORDS BY([Parents]Children;[Parents]Children'First name;>) ` ... End case
2. この例題ではレコード更新日をOn Validateイベントで自動的に割り当てる例を示します:
` Method of a form Case of ` ... : (Form event=On Validate) [aTable]Last Modified On:=Current date End case
3. この例題では、ドロップダウンリスト処理 (初期化, ユーザクリック, オブジェクトのリリース) をオブジェクトメソッドにカプセル化します:
` asBurgerSize Drop-down list Object Method
Case of
: (Form event=On Load)
ARRAY STRING(31;asBurgerSize;3)
asBurgerSize{1}:="Small"
asBurgerSize{1}:="Medium"
asBurgerSize{1}:="Large"
: (Form event=On Clicked)
If (asBurgerSize#0)
ALERT(asBurgerSize{asBurgerSize}+" バーガーが選択されました。")
End if
: (Form event=On Unload)
CLEAR VARIABLE(asBurgerSize)
End case
4. この例題ではオブジェクトメソッドで、ピクチャのみを受け付けるフィールドのドラッグ&ドロップ処理の方法を示します:
` [aTable]aPicture ピクチャ フィールドオブジェクトメソッド
Case of
: (Form event=On Drag Over)
` ドラッグ&ドロップ処理が開始され、マウスが現在フィールド上にある
` ソースオブジェクトに関する情報を取得
DRAG AND DROP PROPERTIES ($vpSrcObject;$vlSrcElement;$lSrcProcess)
` ソースプロセスの番号をストする必要はない
` 実行されいるオブジェクトメソッドは同じプロセス内で動作しいる
$vlDataType:=Type ($vpSrcObject->)
` ソースデータはピクチャか (フィールド, 変数または配列)?
If (($vlDataType=Is Picture) | ($vlDataType=Picture Array))
` 真ならドラッグを受け入れる
$0:=0
Else
` 偽ならドラッグを拒否する
$0:=-1
End if
: (Form event=On Drop)
` ソースデータがオブジェクトにドロップされたのでオブジェクトにコピーする
` ソースオブジェクトに関する情報を取得
DRAG AND DROP PROPERTIES ($vpSrcObject;$vlSrcElement;$lSrcProcess)
$vlDataType:=Type ($vpSrcObject->)
Case of
` ソースオブジェクトはピクチャフィールドまたは変数
: ($vlDataType=Is Picture)
` ソースオブジェクトは同じプロセスから来いるか (つまり同じウィンドウのフォームか)t?
If ($lSrcProcess=Current process)
` そうならソースをコピー
[aTable]aPicture:=$vpSrcObject->
Else
` そうでない場合、ソースオブジェクトを利用できるか?
If (Is a variable ($vpSrcObject))
` 真ならソースプロセスから値を取得
GET PROCESS VARIABLE ($lSrcProcess;$vpSrcObject->;$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
Else
` 偽ならCALL PROCESSを使用しソースプロセスから値を取得
End if
End if
` ソースオブジェクトがピクチャ配列
: ($vlDataType=Picture Array)
` ソースオブジェクトは同じプロセスにあるか (つまり同じプロセスの同じウィンドウか)?
If ($lSrcProcess=Current process)
` 真ならソース値をコピー
[aTable]aPicture:=$vpSrcObject->{$vlSrcElement}
Else
` そうでなければソースプロセスから値を取得
GET PROCESS VARIABLE ($lSrcProcess;$vpSrcObject
->{$vlSrcElement};$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
End if
End case
End case
Note: On Drag Over や On Drop イベントを使用する他の例題は、DRAG AND DROP PROPERTIES コマンドの例題を参照してください。
5. この例題はフォームメソッドのテンプレートです。出力フォームとしてサマリレポートがフォームを使用する際に発生するイベントを示しています:
` Method of a form being used as output form for a summary report $vpFormTable:=Current form table Case of ` ... : (Form event=On Header) ` ヘッダエリアの印刷開始 Case of : (Before selection($vpFormTable->)) ` 最初のブレークヘッダ用のコード : (Level = 1) ` ヘッダブレークレベル 1 用のコード : (Level = 2) ` ヘッダブレークレベル 2 用のコード ` ... End case : (Form event=On Printing Detail) ` レコードの印刷開始 ` レコード毎のコードを記述 : (Form event=On Printing Break) ` ブレークエリアの印刷開始 Case of : (Level = 0) ` ブレークレベル0 用のコード : (Level = 1) ` レークレベル1 用のコード ` ... End case : (Form event=On Printing Footer) If(End selection($vpFormTable->)) ` 最後のフッタ用のコード Else ` フッタ用のコード End if End case
6. この例題はDISPLAY SELECTIONやMODIFY SELECTIONで表示されるフォームで発生するイベントを処理するメソッドのテンプレートです。説明的にするため、フォームウィンドウのタイトルバーにイベントの説明が表示されます:
` フォームメソッド Case of : (Form event=On Load) $vsTheEvent:="フォームが表示されようとしいる" : (Form event=On Unload) $vsTheEvent:="出力フォームを抜け、スクリーンから消えようとしいる" : (Form event=On Display Detail) $vsTheEvent:="表示中のレコード #"+String(Selected record number([TheTable])) : (Form event=On Menu Selected) $vsTheEvent:="メニュー項目が選択された" : (Form event=On Header") $vsTheEvent:="ヘッダエリアが描画されようとしいる" : (Form event=On Clicked") $vsTheEvent:="レコードがクリックされた" : (Form event=On Double Clicked") $vsTheEvent:="レコードがダブルクリックされた" : (Form event=On Open Detail) $vsTheEvent:="レコード #"+String(Selected record number([TheTable]))+" がダブルクリックされた" : (Form event=On Close Detail) $vsTheEvent:="出力フォームに戻る" : (Form event=On Activate) $vsTheEvent:="フォームのウィンドウが最前面になった" : (Form event=On Deactivate) $vsTheEvent:="フォームのウィンドウが最前面でなくなった" : (Form event=On Outside call) $vsTheEvent:="プロセスの呼び出しを受信した" Else $vsTheEvent:="発生したイベント #"+String(Form event) End case SET WINDOW TITLE ($vsTheEvent)
7. On Before Keystroke と On After Keystroke イベントを処理する方法はGet edited text, Keystroke と FILTER KEYSTROKE コマンドの説明を参照してください。
8. この例題は、スクロールエリアでクリックとダブルクリックを同様に扱う方法を示しています:
` asChoices scrollable area object method Case of : (Form event=On Load) ARRAY STRING (...;asChoices;...) ` ... asChoices:=0 : ((Form event=On Clicked) | (Form event=On Double Clicked)) If (asChoices#0) ` 項目がクリックされたので、何らかの処理を行う ` ... End if ` ... End case
9. この例題では、クリックとダブルクリックで異なるレスポンスをする方法を示します。要素0を使用して選択された項目を追跡しています:
` asChoices scrollable area object method
Case of
: (Form event=On Load)
ARRAY STRING (...;asChoices;...)
` ...
asChoices:=0
asChoices{0}:="0"
: (Form event=On Clicked)
If (asChoices#0)
If (asChoices#Num(asChoices))
` 新しい項目がクリックされたので何かを行う
` ...
` 次回のために、新しく選択された要素を保存
asChoices{0}:=String (asChoices)
End if
Else
asChoices:=Num(asChoices{0})
End if
: (Form event=On Double Clicked)
If (asChoices#0)
` 項目がダブルクリックされたのでここで何かを行う
End if
` ...
End case
10. この例題では、 On Getting Focus と On Losing Focusを使用して、フォームメソッド内でステータス情報を管理します。:
` [Contacts];"Data Entry" form method Case of : (Form Event=On Load) C_TEXT(vtStatusArea) vtStatusArea:="" : (Form Event=On Getting Focus) RESOLVE POINTER (Focus object;$vsVarName;$vlTableNum;$vlFieldNum) If (($vlTableNum#0) & ($vlFieldNum#0)) Case of : ($vlFieldNum=1) ` Last name フィールド vtStatusArea:="Enter the Last name of the Contact; it will be capitalized automatically" ` ... : ($vlFieldNum=10) ` Zip Code フィールド vtStatusArea:="Enter a 5-digit zip code; it will be checked and validated automatically" ` ... End case End if : (Form Event=On Losing Focus) vtStatusArea:="" ` ... End case
11. この例題では、レコードデータ入力に使用されるフォームで、ウィンドウを閉じる際の処理を示します:
` Method for an input form
$vpFormTable:=Current form table
Case of
` ...
: (Form Event=On Close Box)
If (Modified record($vpFormTable->))
CONFIRM ("このレコードは更新されいます。保存しますか?")
If (OK=1)
ACCEPT
Else
CANCEL
End if
Else
CANCEL
End if
` ...
End case
12. この例題では、文字フィールドが更新されるたびに、1文字目を大文字に、それ以外を小文字に変換する方法を示します:
` [Contacts]First Name Object method Case of ` ... : (Form event=On Data Change) [Contacts]First Name:= Uppercase(Substring([Contacts]First Name;1;1))+ Lowercase(Substring([Contacts]First Name;2)) ` ... End case
参照
CALL PROCESS, Current form table, DRAG AND DROP PROPERTIES, FILTER KEYSTROKE, Get edited text, Keystroke, SET TIMER.