| 4D v13.4Form event | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v13.4
 Form event 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Form event -> 戻り値 | ||||||||
| 引数 | 型 | 説明 | ||||||
| 戻り値 | 倍長整数 |   | フォームイベント番号 | |||||
Form eventコマンドは、現在生成中のフォームイベントタイプを示す数値を返します。通常フォームやオブジェクトメソッド内でForm eventを使用します。
4DにはForm Eventsテーマで定義された定数が用意されており、Form eventから返される値と比較することができます。
イベントには、一般的なイベント(任意のタイプのオブジェクトに対して生成される)と、特定タイプのオブジェクトのみに発生するイベントがあります。
| 定数 | 型 | 値 | コメント | 
| On Load | 倍長整数 | 1 | フォームが表示または印刷されようとしている | 
| On Validate | 倍長整数 | 3 | レコードのデータ入力が受け入れられた | 
| On Clicked | 倍長整数 | 4 | オブジェクト上でクリックされた | 
| On Header | 倍長整数 | 5 | フォームのヘッダエリアが印刷あるいは表示されようとしている | 
| On Printing Break | 倍長整数 | 6 | フォームのブレークエリアのひとつが印刷されようとしている | 
| On Printing Footer | 倍長整数 | 7 | フォームのフッタエリアが印刷されようとしている | 
| On Display Detail | 倍長整数 | 8 | レコードがリスト中に、あるいは行がリストボックス中に表示されようとしている | 
| On Outside Call | 倍長整数 | 10 | フォームがCALL PROCESSによる呼び出しを受けた | 
| On Activate | 倍長整数 | 11 | フォームウィンドウが最前面のウィンドウになった | 
| On Deactivate | 倍長整数 | 12 | フォームウィンドウが最前面のウィンドウでなくなった | 
| On Double Clicked | 倍長整数 | 13 | オブジェクト上でダブルクリックされた | 
| On Losing Focus | 倍長整数 | 14 | フォームオブジェクトがフォーカスを失った | 
| On Getting Focus | 倍長整数 | 15 | フォームオブジェクトがフォーカスを得た | 
| On Drop | 倍長整数 | 16 | データがオブジェクトにドロップされた | 
| On Before Keystroke | 倍長整数 | 17 | フォーカスのあるオブジェクトに文字が入力されようとしている。Get edited textはこの文字を含まないオブジェクトのテキストを返す | 
| On Menu Selected | 倍長整数 | 18 | メニュー項目が選択された | 
| On Plug in Area | 倍長整数 | 19 | 外部オブジェクトのオブジェクトメソッドの実行がリクエストされた | 
| On Data Change | 倍長整数 | 20 | オブジェクトのデータが変更された | 
| On Drag Over | 倍長整数 | 21 | データがオブジェクト上にドロップされる可能性がある | 
| On Close Box | 倍長整数 | 22 | ウィンドウのクローズボックスがクリックされた | 
| On Printing Detail | 倍長整数 | 23 | フォームの詳細エリアが印刷されようとしている | 
| On Unload | 倍長整数 | 24 | フォームを閉じる、あるいは解放しようとしている | 
| On Open Detail | 倍長整数 | 25 | レコードがダブルクリックされて、入力フォームを開こうとしている | 
| On Close Detail | 倍長整数 | 26 | 入力フォームから離れ、出力フォームに移動しようとしている | 
| On Timer | 倍長整数 | 27 | SET TIMERコマンドで設定した時間が経過した | 
| On After Keystroke | 倍長整数 | 28 | フォーカスのあるオブジェクトに文字が入力されようとしている。Get edited textはこの文字を含むオブジェクトのテキストを返す | 
| On Resize | 倍長整数 | 29 | フォームウィンドウがリサイズされた | 
| On After Sort | 倍長整数 | 30 | (リストボックスのみ) リストボックスの列中で標準のソートが行われた | 
| On Selection Change | 倍長整数 | 31 | 
 | 
| On Column Moved | 倍長整数 | 32 | (リストボックスのみ) リストボックスの列がユーザのドラッグ&ドロップで移動された | 
| On Column Resize | 倍長整数 | 33 | (リストボックスのみ) リストボックスの列幅が変更された | 
| On Row Moved | 倍長整数 | 34 | (リストボックスのみ) リストボックスの行がユーザのドラッグ&ドロップで移動された | 
| On Mouse Enter | 倍長整数 | 35 | マウスカーソルがオブジェクトの描画エリア内に入った | 
| On Mouse Leave | 倍長整数 | 36 | マウスカーソルがオブジェクトの描画エリアから出た | 
| On Mouse Move | 倍長整数 | 37 | マウスカーソルがオブジェクトの描画エリア上で (最低1ピクセル) 動いた | 
| On Arrow Click | 倍長整数 | 38 | (3Dボタンのみ)3D ボタンの"三角"エリアがクリックされた | 
| On Long Click | 倍長整数 | 39 | (3Dボタンのみ) 3D ボタンがクリックされ、特定の時間以上マウスボタンが押され続けている | 
| On Load Record | 倍長整数 | 40 | リスト更新中、更新中にレコードがロードされた (ユーザがレコード行をクリックし、フィールドが編集モードになった) | 
| On Before Data Entry | 倍長整数 | 41 | (リストボックスのみ) リストボックスセルが編集モードに変更されようとしている | 
| On Header Click | 倍長整数 | 42 | (リストボックスのみ) リストボックスの列ヘッダでクリックが行われた | 
| On Expand | 倍長整数 | 43 | (階層リストまたは階層リストボックスのみ) クリックやキーストロークで階層リストの要素が展開された | 
| On Collapse | 倍長整数 | 44 | (階層リストまたは階層リストボックスのみ) クリックやキーストロークで階層リストの要素が折りたたまれた | 
| On After Edit | 倍長整数 | 45 | フォーカスのあるオブジェクトの内容が更新された | 
| On Begin Drag Over | 倍長整数 | 46 | オブジェクトがドラッグされている | 
| On Begin URL Loading | 倍長整数 | 47 | (Webエリアのみ) 新しいURLがWeb エリアにロードされた | 
| On URL Resource Loading | 倍長整数 | 48 | (Webエリアのみ) 新しいリソースがWeb エリアにロードされた | 
| On End URL Loading | 倍長整数 | 49 | (Webエリアのみ) URLのすべてのリソースがロードされた | 
| On URL Loading Error | 倍長整数 | 50 | (Webエリアのみ) URLをロード中にエラーが発生した | 
| On URL Filtering | 倍長整数 | 51 | (Webエリアのみ) Web エリアがURLをブロックした | 
| On Open External Link | 倍長整数 | 52 | (Webエリアのみ) 外部URLがブラウザで開かれた | 
| On Window Opening Denied | 倍長整数 | 53 | (Webエリアのみ) ポップアップウィンドウがブロックされた | 
| On bound variable change | 倍長整数 | 54 | サブフォームにバインドされた変数が更新された | 
| On Mac toolbar button | 倍長整数 | 55 | Mac OSにおいて、ユーザーがツールバー管理ボタンをクリックした | 
| On Page Change | 倍長整数 | 56 | フォーム中のカレントページが変更された | 
| On Footer Click | 倍長整数 | 57 | (リストボックスのみ) リストボックスあるいはリストボックス列でフッターがクリックされた | 
| On Delete Action | 倍長整数 | 58 | (階層リストとリストボックスのみ) ユーザーが項目の削除を試みた | 
| On Picture Scroll | 倍長整数 | 59 | マウスやキーボードを使用して、ユーザーがピクチャーフィールドや変数の内容をスクロールした。 | 
注: 出力フォーム用のイベントをプロジェクトフォームで実装することはできません。関連するイベントは以下の通りです: 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はサブフォームオブジェクト内で、オブジェクトとフォームメソッドの関係と同じルールを適用します。
On Load と On Unload イベントを除き、発生したイベントがフォームイベントプロパティで選択されていなかったとしても、オブジェクトプロパティで選択されていればそのオブジェクトメソッドの呼び出しが妨げられることはありません。言い換えれば、フォームレベルでイベントを有効あるいは無効にしても、オブジェクトイベントプロパティには影響ありません。
特定のイベントに関連するオブジェクトの数は、イベントの性質により異なります:
警告: 他のすべてのイベントと異なり、On Begin Drag Over やイベント中、呼び出されるメソッドは、ドラッグ&ドロップソースオブジェクトのプロセスのコンテキストで実行されます。ドラッグ&ドロップ先のオブジェクトではありません。詳細はドラッグ&ドロップを参照してください。
| ヘッダーエリアのそれぞれのオブジェクトごとに: | 
| 
 
 
 
 | 
以下の表はそれぞれのイベントごとにどのようにオブジェクトメソッドとフォームメソッドが呼ばれるかを概説します:
| イベント | オブジェクトメソッド | フォームメソッド | オブジェクト | 
| On Load | O | O | すべてのオブジェクト | 
| On Unload | O | O | すべてのオブジェクト | 
| On Validate | O | O | すべてのオブジェクト | 
| On Clicked | O (クリック可能なら) (*) | O | 関係するオブジェクトのみ | 
| On Double Clicked | O (クリック可能なら) (*) | O | 関係するオブジェクトのみ | 
| On Before Keystroke | O (キーボード入力可能なら) (*) | O | 関係するオブジェクトのみ | 
| On After Keystroke | O (キーボード入力可能なら) (*) | O | 関係するオブジェクトのみ | 
| On After Edit | O (入力可能なら) (*) | O | 関係するオブジェクトのみ | 
| On Getting Focus | O (フォーカス可なら) (*) | O | 関係するオブジェクトのみ | 
| On Losing Focus | O (フォーカス可なら) (*) | O | 関係するオブジェクトのみ | 
| On Activate | X | O | None | 
| On Deactivate | X | O | None | 
| On Outside Call | X | O | None | 
| On Page Change | X | O | None | 
| On Begin Drag Over | O (ドラッグ可なら) (**) | O | 関係するオブジェクトのみ | 
| On Drop | O (ドロップ可なら) (**) | O | 関係するオブジェクトのみ | 
| On Drag Over | O (ドロップ可なら) (**) | Never | 関係するオブジェクトのみ | 
| On Mouse Enter | O | O | すべてのオブジェクト | 
| On Mouse Move | O | O | すべてのオブジェクト | 
| On Mouse Leave | O | O | すべてのオブジェクト | 
| On Menu Selected | X | O | None | 
| On Mac toolbar button | X | O | None | 
| On bound variable change | X | O | None | 
| On Data Change | O (更新可なら)) (*) | O | 関係するオブジェクトのみ | 
| On Plug in Area | O | O | 関係するオブジェクトのみ | 
| On Header | O | O | すべてのオブジェクト | 
| On Printing Detail | O | O | すべてのオブジェクト | 
| On Printing Break | O | O | すべてのオブジェクト | 
| On Printing Footer | O | O | すべてのオブジェクト | 
| On Close Box | X | O | None | 
| On Display Detail | O | O | すべてのオブジェクト | 
| On Open Detail | X | O | None | 
| On Close Detail | X | O | None | 
| On Resize | X | O | None | 
| On Selection Change | O (***) | O | 関係するオブジェクトのみ | 
| On Load Record | X | O | None | 
| On Timer | X | O | None | 
| On Picture Scroll | O | O | 関係するオブジェクトのみ | 
| On Before Data Entry | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On Column Moved | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On Row Moved | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On Column Resize | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On Header Click | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On Footer Click | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On After Sort | O (リストボックス) | X | 関係するオブジェクトのみ | 
| On Long Click | O (3D ボタン) | O | 関係するオブジェクトのみ | 
| On Arrow Click | O (3D ボタン) | O | 関係するオブジェクトのみ | 
| On Expand | O (階層リストとリストボックス) | X | 関係するオブジェクトのみ | 
| On Collapse | O (階層リストとリストボックス) | X | 関係するオブジェクトのみ | 
| On Delete Action | O (階層リストとリストボックスx) | X | 関係するオブジェクトのみ | 
| On URL Resource Loading | O (Web エリア) | X | 関係するオブジェクトのみ | 
| On Begin URL Loading | O (Web エリア) | X | 関係するオブジェクトのみ | 
| On URL Loading Error | O (Web エリア) | X | 関係するオブジェクトのみ | 
| On URL Filtering | O (Web エリア) | X | 関係するオブジェクトのみ | 
| On End URL Loading | O (Web エリア) | X | 関係するオブジェクトのみ | 
| On Open External Link | O (Web エリア) | X | 関係するオブジェクトのみ | 
| On Window Opening Denied | O (Web エリア) | X | 関係するオブジェクトのみ | 
重要: イベントに対応するプロパティが選択されている場合にのみ、フォームやオブジェクトのメソッドが呼び出されることに留意してください。デザインモードのフォームエディタのプロパティリストでイベントを無効にすると、メソッドが呼び出される回数を減らすことができ、フォームの実行速度を最適化できます。
警告: オブジェクトのOn Load と On Unload イベントが生成されるには、オブジェクトとオブジェクトが属するフォームの両方で有効にされていなければなりません。オブジェクトのみでイベントが有効になっている場合、イベントは生成されません。これら2つのイベントはフォームレベルでも有効にされていなければなりません。
 
イベントの性質やプロパティに基づき、オブジェクトに対してイベントが生成されるとオブジェクトメソッドが呼び出されます。ここでは、さまざまなタイプのオブジェクトを扱うにあたり、一般的に使用されるイベントについて詳細に説明します。
フォームエディタのプロパティリストには、選択されたオブジェクトあるいはフォームで利用可能なイベントのみが表示されることに留意してください。
クリック可能なオブジェクトは主にマウスで操作します。以下のオブジェクトが含まれます:
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コマンドを使用して、低レベルでデータ入力をフィルタできます。
キーボード入力可能なオブジェクトやデータタイプには以下が含まれます:
Note: 階層リストは入力可能なオブジェクトですが、このオブジェクトではOn After Edit, On Before KeystrokeそしてOn After Keystrokeは管理されません (後述の “階層リスト” の段落を参照)。
更新可能オブジェクトは、マウスやキーボードを使用して値を変更することのできるデータソースを持ちます。これらはOn Clickedイベントで処理されるユーザインタフェースコントロールとしては扱われません。以下が含まれます:
これらのオブジェクトはOn Data Changeイベントを受け取ります。On Data Changeオブジェクトイベントプロパティが選択されると、Form event コマンドから返されるOn Data Changeによりイベントを検知し、データソース値の変更を処理できます。イベントは、オブジェクトに結び付けられた変数が4Dにより内部的に更新され次第、生成されます (例えば、一般的に入力エリアオブジェクトがフォーカスを失った時)。
タブ可オブジェクトは、タブキーやクリックによりフォーカスを得るオブジェクトです。フォーカスを持つオブジェクトは、メニューやボタンへのモディファイアではない (キーボードでタイプされた) 文字を受け取ります。
以下を除き、すべてのオブジェクトはタブ可です:
On Getting Focus や On losing Focus オブジェクトイベントプロパティを選択したら、Form event コマンドから返されるOn Getting Focus や On Losing Focusを検知して、フォーカスの変更を処理できます。
3D を使用すると詳細にグラフィックインタフェースを設定できます (f3D ボタンに関する説明はDesign Referenceマニュアルを参照してください)。汎用のイベントに加え、これらのボタンを管理するために2つの追加のイベントを使用できます:

なし, ツールバーボタン, べベル, 角の丸いべベルおよびOffice XPタイプの3D ボタンや、3D ラジオボタン、3D チェックボックスは“ポップアップメニューあり”プロパティをサポートします:
リストボックス特有の様々な機能を管理するために特別なフォームイベントを使用できます:
汎用のイベントに加え、階層リスト上で行われるアクションを処理するために3つのイベントを使用できます:
これらのイベントは相互に排他的ではなく、階層リスト中で連続して生成されることがあります:
- キーストロークに伴い (順に):
| イベント | コンテキスト | |
| 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 | クリックまたはダブルクリックでリストをアクティブにした | 
(4D v13.2より) On Picture Scroll フォームイベントはユーザーが (フィールドや変数) エリア内のピクチャーをスクロールすると生成されます。ピクチャーエリアのサイズがピクチャーよりも小さく、かつ表示フォーマットが"トランケート (中央合わせなし)"に設定されている場合のみスクロールが可能です。この点についてはピクチャーフォーマットを参照してください。
このイベントはスクロールがユーザーアクション (スクロールバーやカーソル、マウスホイール、キーボードの利用) の結果として行われた場合に生成されます (キーボードによるスクロールについてはスクロールバー参照)。
注: OBJECT SET SCROLL POSITIONコマンドの結果としてスクロールが行われた場合、イベントは生成されません。
例題15を参照してください。
サブフォームコンテナオブジェクト (親フォーム上に置かれた、ひとつのサブフォームインスタンスを含むオブジェクト) は以下のイベントをサポートします:
Note: CALL SUBFORM CONTAINERコマンドを使用して、サブフォーム内で生成可能なあらゆるカスタムイベントタイプを指定できます。このコマンドにより、コンテナオブジェクトメソッドを呼び出し、イベントコードを渡すことができます。
Webエリアでは7つのイベントを利用できます:
この例題ではレコード更新日をOn Validateイベントで自動的に割り当てる例を示します:
  ` Method of a form
 Case of
  ` ...
    :(Form event=On Validate)
       [aTable]Last Modified On:=Current date
 End caseこの例題では、ドロップダウンリスト処理 (初期化, ユーザクリック, オブジェクトのリリース) をオブジェクトメソッドにカプセル化します:
  ` 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この例題ではオブジェクトメソッドで、ピクチャのみを受け付けるフィールドのドラッグ&ドロップ処理の方法を示します:
  ` [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 caseNote: On Drag Over や On Drop イベントを使用する他の例題は、DRAG AND DROP PROPERTIES コマンドの例題を参照してください。
この例題はフォームメソッドのテンプレートです。出力フォームとしてサマリレポートがフォームを使用する際に発生するイベントを示しています:
  ` 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この例題は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)On Before Keystroke と On After Keystroke イベントを処理する方法はGet edited text、Keystroke、そしてFILTER KEYSTROKEコマンドの説明を参照してください。
この例題は、スクロールエリアでクリックとダブルクリックを同様に扱う方法を示しています:
  ` 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この例題では、クリックとダブルクリックで異なるレスポンスをする方法を示します。要素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この例題では、 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この例題では、レコードデータ入力に使用されるフォームで、ウィンドウを閉じる際の処理を示します:
  ` 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この例題では、文字フィールドが更新されるたびに、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この例題では、文字フィールドが更新されるたびに、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以下の例題では階層リストで削除アクションを管理する方法を示します:
 ... // 階層リストメソッド
:($Event=On Delete Action)
 ARRAY LONGINT($itemsArray;0)
 $Ref:=Selected list items(<>HL;$itemsArray;*)
 $n:=Size of array($itemsArray)
 
 Case of
    :($n=0)
       ALERT("項目が選択されていません。")
       OK:=0
    :($n>=1)
       CONFIRM("選択された項目を削除しますか?")
 End case
 
 If(OK=1)
    For($i;1;$n)
       DELETE FROM LIST(<>HL;$itemsArray{$i};*)
    End for
 End ifこの例題では On Picture Scroll フォームイベントを使用してフォーム中の2つのピクチャーを同期します。以下のコードをフォームメソッドに記述します:
 Case of
    :(Form event=On Picture Scroll)
  // 左側のピクチャー位置を取得
       OBJECT GET SCROLL POSITION(*;"satellite";vPos;hPos)
  // 右側のピクチャーに適用
       OBJECT SET SCROLL POSITION(*;"plan";vPos;hPos;*)
 End case結果:
	プロダクト: 4D
	テーマ: フォームイベント
	番号: 
        388
        
        
        
	

	変更: 4D v11 SQL Release 2
	変更: 4D v12
	変更: 4D v13
	変更: 4D v13.2
CALL PROCESS
CALL SUBFORM CONTAINER
Current form table
DRAG AND DROP PROPERTIES
FILTER KEYSTROKE
Get edited text
Keystroke
SET TIMER