ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Form event code
|
Form event code -> 戻り値 | ||||||||
引数 | 型 | 説明 | ||||||
戻り値 | 倍長整数 |
![]() |
フォームイベント番号 | |||||
Form event code は以前のバージョンの4D ではForm event という名前でした。これはオブジェクト型を返すFORM Event コマンドが追加されたときに、分かりやすさのために名称が変更されました。
Form event codeコマンドは、現在生成中のフォームイベントタイプを示す数値を返します。通常フォームやオブジェクトメソッド内でForm event codeを使用します。
4DにはForm Eventsテーマで定義された定数が用意されており、Form event codeから返される値と比較することができます。
イベントには、一般的なイベント(任意のタイプのオブジェクトに対して生成される)と、特定タイプのオブジェクトのみに発生するイベントがあります。
定数 | 型 | 値 | コメント |
On Load | 倍長整数 | 1 | フォームが表示または印刷されようとしている |
On Mouse Up | 倍長整数 | 2 | (ピクチャーのみ) ユーザーがピクチャーオブジェクト内にて左マウスボタンを離した |
On Validate | 倍長整数 | 3 | レコードのデータ入力が受け入れられた |
On Clicked | 倍長整数 | 4 | オブジェクト上でクリックされた |
On Header | 倍長整数 | 5 | フォームのヘッダエリアが印刷あるいは表示されようとしている |
On Printing Break | 倍長整数 | 6 | フォームのブレークエリアのひとつが印刷されようとしている |
On Printing Footer | 倍長整数 | 7 | フォームのフッタエリアが印刷されようとしている |
On Display Detail | 倍長整数 | 8 | レコードがリスト中に、あるいは行がリストボックス中に表示されようとしている |
On VP Ready | 倍長整数 | 9 | (4D View Proエリアのみ) 4D View Pro エリアのロードが完了した |
On Outside Call | 倍長整数 | 10 | フォームがPOST OUTSIDE CALLによる呼び出しを受けた |
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 | (リストボックスと4D View Pro) リストボックスの列幅がユーザーのマウス操作によって変更された |
On Row Moved | 倍長整数 | 34 | (リストボックスのみ) リストボックスの行がユーザのドラッグ&ドロップで移動された |
On Mouse Enter | 倍長整数 | 35 | マウスカーソルがオブジェクトの描画エリア内に入った |
On Mouse Leave | 倍長整数 | 36 | マウスカーソルがオブジェクトの描画エリアから出た |
On Mouse Move | 倍長整数 | 37 | マウスカーソルがオブジェクトの描画エリア上で (最低1ピクセル) 動いたか、変更キー(Shift, Alt, Shift Lock)が押された |
On Alternative Click | 倍長整数 | 38 |
|
On Long Click | 倍長整数 | 39 | (3Dボタンのみ) 3D ボタンがクリックされ、特定の時間以上マウスボタンが押され続けている |
On Load Record | 倍長整数 | 40 | リスト更新中、更新中にレコードがロードされた (ユーザがレコード行をクリックし、フィールドが編集モードになった) |
On Before Data Entry | 倍長整数 | 41 | (リストボックスのみ) リストボックスセルが編集モードに変更されようとしている |
On Header Click | 倍長整数 | 42 | (リストボックスと4D View Pro) リストボックスの列ヘッダでクリックが行われた |
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 Page Change | 倍長整数 | 56 | フォーム中のカレントページが変更された |
On Footer Click | 倍長整数 | 57 | (リストボックスのみ) リストボックスあるいはリストボックス列でフッターがクリックされた |
On Delete Action | 倍長整数 | 58 | (階層リストとリストボックスのみ) ユーザーが項目の削除を試みた |
On Scroll | 倍長整数 | 59 | マウスやキーボードを使用して、ユーザーがピクチャーフィールドや変数の内容をスクロールした。 |
On Row Resize | 倍長整数 | 60 | (4D View Pro のみ) 行の高さがユーザーのマウスによって変更された |
On VP Range Changed | 倍長整数 | 61 | 4D Vierw Pro のセルレンジが変更された(例: フォーミュラの計算、値がセルから削除された、など) |
注: 出力フォーム用のイベントをプロジェクトフォームで実装することはできません。関連するイベントは以下の通りです: 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 Mouse Up | O | X | 関係するオブジェクトのみ |
On Menu Selected | 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 (ただしリストボックス以外) | Yes | リストボックスのみ |
On Close Detail | X (ただしリストボックス以外) | Yes | リストボックスのみ |
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 Scroll | O | X | 関係するオブジェクトのみ |
On Before Data Entry | O (リストボックス) | X | 関係するオブジェクトのみ |
On Column Moved | O (リストボックス) | X | 関係するオブジェクトのみ |
On Row Moved | O (リストボックス) | X | 関係するオブジェクトのみ |
On Column Resize | O (リストボックスと4D View Proエリア) | X | 関係するオブジェクトのみ |
On Header Click | O (リストボックスと4D View Proエリア) | X | 関係するオブジェクトのみ |
On Footer Click | O (リストボックス) | X | 関係するオブジェクトのみ |
On After Sort | O (リストボックス) | X | 関係するオブジェクトのみ |
On Long Click | O (3D ボタン) | O | 関係するオブジェクトのみ |
On Alternative Click | O (3D ボタンとリストボックス) | X | 関係するオブジェクトのみ |
On Expand | O (階層リストとリストボックス) | X | 関係するオブジェクトのみ |
On Collapse | O (階層リストとリストボックス) | X | 関係するオブジェクトのみ |
On Delete Action | O (階層リストとリストボックス) | 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 VP Ready | O (4D View Pro エリア) | O | 関係するオブジェクトのみ |
On Row Resize | O (4D View Pro エリア) | O | 関係するオブジェクトのみ |
重要: イベントに対応するプロパティが選択されている場合にのみ、フォームやオブジェクトのメソッドが呼び出されることに留意してください。デザインモードの フォームエディタのプロパティリストでイベントを無効にすると、メソッドが呼び出される回数を減らすことができ、フォームの実行速度を最適化できます。
警告: オブジェクトのOn Load と On Unload イベントが生成されるには、オブジェクトとオブジェクトが属するフォームの両方で有効にされていなければなりません。オブジェクトのみでイベントが有効に なっている場合、イベントは生成されません。これら2つのイベントはフォームレベルでも有効にされていなければなりません。
イベントの性質やプロパティに基づき、オブジェクトに対してイベントが生成されるとオブジェクトメソッドが呼び出されます。ここでは、さまざまなタイプのオブジェクトを扱うにあたり、一般的に使用されるイベントについて詳細に説明します。
フォームエディタのプロパティリストには、選択されたオブジェクトあるいはフォームで利用可能なイベントのみが表示されることに留意してください。
クリック可能なオブジェクトは主にマウスで操作します。以下のオブジェクトが含まれます:
On Clicked や On Double Clicked オブジェクトイベントプロパティを選択したのち、Form event コマンドを使用してオブジェクト上でのクリックを検知し処理することができます。Form event コマンドはユーザアクションに応じ、On Clicked または On Double Clickedを返します。
注: 4D v14以降、テキスト(テキスト、日付、時間、数字型)が含まれる入力可能なフィールドおよび変数は On Clicked と On Double Clicked イベントを生成するようになりました。
両イベントがオブジェクトに対し選択されている場合、ダブルクリックが行われるとまずOn Clicked が、そしてOn Double Clicked イベントが生成されます。
これらすべてのオブジェクトにおいて、On Clickedイベントはマウスボタンが離されたときに生成されます。しかしいくつか例外があります:
On Clicked イベントのコンテキストにおいてはClickcount コマンドを使うことによってユーザーが行ったクリック数をテストすることができます。
注: いくつかのオブジェクトはキーボードからも操作可能です。例えばチェックボックスがフォーカスを得ると、スペースバーでオン/オフを切り替えることができます。この場合でもOn Clickedイベントは生成されます。
警告: コンボボックスはクリック可能なオブジェクトとしては扱われません。コンボボックスは入力可能なテキストエリアとして扱われ、割り当てられたドロップダウンリストにはデフォルト値が提供されます。コンボボックスの処理はOn Before Keystroke, On After Keystroke そして On Data Change イベントを使用して行います。
注: 4D v13 以降、ポップアップメニュー/ドロップダウンリストと、階層ポップアップメニューもOn Data Change を生成できるようになりました。これにより、カレントの値と異なる値が選択されたときにオブジェクトの起動を察知できるようになりました。
キーボードから入力可能なオブジェクトとは、キーボードを使用してデータを入力できるオブジェクトです。これらのオブジェクトではOn After Edit, On Before KeystrokeそしてOn After Keystrokeイベントを検知し、Get edited textコマンドを使用して、低レベルでデータ入力をフィルタできます。
キーボード入力可能なオブジェクトやデータタイプには以下が含まれます:
注: 4D v14以降、テキスト(テキスト、日付、時間、数字型)が含まれる入力可能なフィールドおよび変数は On Clicked と On Double Clicked イベントを生成するようになりました。
注: 階層リストは入力可能なオブジェクトですが、このオブジェクトでは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つの追加のイベントを使用できます:
以下の3D ボタン、3D ラジオボタン、および3D チェックボックスは“ポップアップメニューあり”プロパティをサポートします: なし, ツールバーボタン, べベル, 角の丸いべベルおよびOffice XPタイプ
リストボックス特有の様々な機能を管理するために様々なフォームイベントを使用できます:
「セレクション」型のリストボックスのコンテキストにおいて、二つの一般的なイベントが使用できるようになりました:
汎用のイベントに加え、階層リスト上で行われるアクションを処理するために複数のイベントを使用できます:
これらのイベントは相互に排他的ではなく、階層リスト中で連続して生成されることがあります:
- キーストロークに伴い (順に):
イベント | コンテキスト | |
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 | クリックまたはダブルクリックでリストをアクティブにした |
サブフォームコンテナオブジェクト (親フォーム上に置かれた、ひとつのサブフォームインスタンスを含むオブジェクト) は以下のイベントをサポートします:
注: CALL SUBFORM CONTAINER コマンドを使用して、サブフォーム内で生成可能なあらゆるカスタムイベントタイプを指定できます。このコマンドにより、コンテナオブジェクトメソッドを呼び出し、イベントコードを渡すことができます。
次のイベントはサブフォームのフォームメソッドにも受け取られます:
Webエリアでは7つのイベントを利用できます:
4D View Pro エリアでは以下のイベントが利用可能です。
これらのイベントの詳細な情報については、On VP Ready フォームイベント の章を参照してください。
この例題ではレコード更新日をOn Validateイベントで自動的に割り当てる例を示します:
// フォームメソッド Form method [#Current_title_incode] <a href="/4Dv20R7/4D/20-R7/Sum.301-7242167.ja.html" class="rte4d_cmd">Sum</a> Form event code
Case of
// ...
:(Form event code=On Validate)
[aTable]Last Modified On:=Current date
End case
この例題では、ドロップダウンリスト処理 (初期化, ユーザクリック, オブジェクトのリリース) をオブジェクトメソッドにカプセル化します:
// asBurgerSize ドロップダウンリストのオブジェクトメソッド
Case of
:(Form event code=On Load)
ARRAY TEXT(asBurgerSize;3)
asBurgerSize{1}:="Small"
asBurgerSize{1}:="Medium"
asBurgerSize{1}:="Large"
:(Form event code=On Clicked)
If(asBurgerSize#0)
ALERT(asBurgerSize{asBurgerSize}+" バーガーが選択されました。")
End if
:(Form event code=On Unload)
CLEAR VARIABLE(asBurgerSize)
End case
この例題ではオブジェクトメソッドで、ピクチャのみを受け付けるフィールドのドラッグ&ドロップ処理の方法を示します:
// [aTable]aPicture ピクチャ フィールドオブジェクトメソッド
Case of
:(Form event code=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 code=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))
&NBSP; // 真ならソースプロセスから値を取得
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
注: On Drag Over や On Drop イベントを使用する他の例題は、_o_DRAG AND DROP PROPERTIES コマンドの例題を参照してください。
この例題はフォームメソッドのテンプレートです。出力フォームとしてサマリレポートがフォームを使用する際に発生するイベントを示しています:
// 概要レポートの出力フォームとして使用されているフォームのフォームメソッド
$vpFormTable:=Current form table
Case of
// ...
:(Form event code=On Header)
// ヘッダエリアの印刷開始
Case of
:(Before selection($vpFormTable->))
// 最初のブレークヘッダ用のコード
:(Level=1)
// ヘッダブレークレベル 1 用のコード
:(Level=2)
// ヘッダブレークレベル 2 用のコード
// ...
End case
:(Form event code=On Printing Detail)
// レコードの印刷開始
// レコード毎のコードを記述
:(Form event code=On Printing Break)
// ブレークエリアの印刷開始
Case of
:(Level=0)
// ブレークレベル0 用のコード
:(Level=1)
// レークレベル1 用のコード
// ...
End case
:(Form event code=On Printing Footer)
If(End selection($vpFormTable->))
// 最後のフッタ用のコード
Else
// フッタ用のコード
End if
End case
この例題はDISPLAY SELECTION または MODIFY SELECTION で表示されるフォームで発生するイベントを処理するメソッドのテンプレートです。説明的にするため、フォームウィンドウのタイトルバーにイベントの説明が表示されます:
// フォームメソッド
Case of
:(Form event code=On Load)
$vsTheEvent:="フォームが表示されようとしている"
:(Form event code=On Unload)
$vsTheEvent:="出力フォームを抜け、スクリーンから消えようとしている"
:(Form event code=On Display Detail)
$vsTheEvent:="表示中のレコード #"+String(Selected record number([TheTable]))
:(Form event code=On Menu Selected)
$vsTheEvent:="メニュー項目が選択された"
:(Form event code=On Header")
$vsTheEvent:="ヘッダエリアが描画されようとしている"
:(Form event code=On Clicked")
$vsTheEvent:="レコードがクリックされた"
:(Form event code=On Double Clicked")
$vsTheEvent:="レコードがダブルクリックされた"
:(Form event code=On Open Detail)
$vsTheEvent:="レコード #"+String(Selected record number([TheTable]))+" がダブルクリックされた"
:(Form event code=On Close Detail)
$vsTheEvent:="出力フォームに戻る"
:(Form event code=On Activate)
$vsTheEvent:="フォームのウィンドウが最前面になった"
:(Form event code=On Deactivate)
$vsTheEvent:="フォームのウィンドウが最前面でなくなった"
:(Form event code=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 スクロール可能エリアオブジェクトメソッド
Case of
:(Form event code=On Load)
ARRAY TEXT(asChoices;...)
// ...
asChoices:=0
:((Form event code=On Clicked)|(Form event code=On Double Clicked))
If(asChoices#0)
// 項目がクリックされたので、何らかの処理を行う
// ...
End if
// ...
End case
この例題では、クリックとダブルクリックで異なるレスポンスをする方法を示します。要素0を使用して選択された項目を追跡しています:
// asChoices scrollable area object method
Case of
:(Form event code=On Load)
ARRAY TEXT(asChoices;...)
// ...
asChoices:=0
asChoices{0}:="0"
:(Form event code=On Clicked)
If(asChoices#0)
If(asChoices#Num(asChoices))
// 新しい項目がクリックされたので何かを行う
// ...
// 次回のために、新しく選択された要素を保存
asChoices{0}:=String(asChoices)
End if
Else
asChoices:=Num(asChoices{0})
End if
:(Form event code=On Double Clicked)
If(asChoices#0)
// 項目がダブルクリックされたのでここで何かを行う
End if
// ...
End case
この例題では、 On Getting Focus と On Losing Focusを使用して、フォームメソッド内でステータス情報を管理します:
// [Contacts];"Data Entry" フォームメソッド
Case of
:(Form event code=On Load)
C_TEXT(vtStatusArea)
vtStatusArea:=""
:(Form event code=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 code=On Losing Focus)
vtStatusArea:=""
// ...
End case
この例題では、レコードデータ入力に使用されるフォームで、ウィンドウを閉じる際の処理を示します:
// 入力フォームのフォームメソッド
$vpFormTable:=Current form table
Case of
// ...
:(Form event code=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 code=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 code=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))+
Lowercase(Substring([Contacts]First Name;2))
// ...
End case
以下の例題では階層リストで削除アクションを管理する方法を示します:
... // 階層リストメソッド
:(Form event code=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 Scroll フォームイベントを使用してフォーム中の2つのピクチャーを同期します。以下のコードを"satellite" のオブジェクトメソッドに記述します:
Case of
:(Form event code=On Scroll)
// 左側のピクチャー位置を取得
OBJECT GET SCROLL POSITION(*;"satellite";vPos;hPos)
// 右側のピクチャーに適用
OBJECT SET SCROLL POSITION(*;"plan";vPos;hPos;*)
End case
結果:
リストボックスで選択されたセルの周りに赤い長方形を描画し、リストボックスがユーザーによって垂直方向にスクロールされた場合には、その長方形を一緒に移動させたい場合を考えます。その場合、リストボックスのオブジェクトメソッドに対して以下のように書きます:
Case of
:(Form event code=On Clicked)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True)&NBSP; //赤い長方形を初期化
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
:(Form event code=On Scroll)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$xlb1;$ylb1;$xlb2;$ylb2)
$toAdd:=LISTBOX Get headers height(*;"LB1") //オーバーラップしないためにヘッダーの高さを取得
If($ylb1+$toAdd<$y1)&($ylb2>$y2) //リストボックス内にいるとき
//単純かのため、ここではヘッダーのみを扱います
//実際にはスクロールバーに加え、
//水平方向のクリッピングも管理しなければなりません。
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
Else
OBJECT SET VISIBLE(*;"RedRect";False)
End if
End case
結果として、赤い長方形はリストボックスのスクロールに沿って移動します:
_o_DRAG AND DROP PROPERTIES
CALL SUBFORM CONTAINER
Current form table
FILTER KEYSTROKE
FORM Event
Get edited text
Keystroke
POST OUTSIDE CALL
SET TIMER
プロダクト: 4D
テーマ: フォームイベント
番号:
388
変更: 4D v11 SQL Release 2
変更: 4D v12
変更: 4D v13
変更: 4D v13.2
変更: 4D v14
変更: 4D v15
変更: 4D v16
変更: 4D v16 R4
名称変更: 4D v18 (Form event)
ランゲージリファレンス ( 4D v20 R7)