メインコンテンツまでスキップ
バージョン: 20 R7 BETA

Form event code

Form event code : Integer

引数説明
戻り値Integerフォームイベント番号

このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。

互換性に関する注意

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倍長整数27SET TIMERコマンドで設定した時間が経過した
On After Keystroke倍長整数28フォーカスのあるオブジェクトに文字が入力されようとしている。Get edited textはこの文字を含むオブジェクトのテキストを返す
On Resize倍長整数29フォームウィンドウまたはサブフォームオブジェクトがリサイズされた (後者の場合は、サブフォームのフォームメソッドにおいてイベントが生成されます)
On After Sort倍長整数30(リストボックスのみ) リストボックスの列中で標準のソートが行われた
On Selection Change倍長整数31リストボックスと4D View Pro: 現在の行や列の選択が変更された リスト中のレコード: リストフォームまたはサブフォームにおいて、カレントレコードあるいはカレントセレクションの行選択が変更された 階層リスト: リスト中の選択がクリックやキーストロークなどで変更された 入力可フィールドや変数: クリックやキー押下により、選択されたテキストやカーソルの位置がエリア内で変更された
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倍長整数383Dボタン: 3D ボタンの"三角"エリアがクリックされたリストボックス: オブジェクト配列のカラム内においてエリプシスボタン("alternateButton" 属性)がクリックされた
: エリプシスボタンはv15以降のバージョンでのみご利用いただけます。
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倍長整数614D 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は引き続き、親フォームのオブジェクトメソッドを呼び出します。言い換えれば、オブジェクトがサブフォームの時、 4Dはサブフォームオブジェクト内で、オブジェクトとフォームメソッドの関係と同じルールを適用します。

On Load と On Unload イベントを除き、発生したイベントがフォームイベントプロパティで選択されていなかったとしても、オブジェクトプロパティで選択されていればそのオブジェ クトメソッドの呼び出しが妨げられることはありません。言い換えれば、フォームレベルでイベントを有効あるいは無効にしても、オブジェクトイベントプロパ ティには影響ありません。

特定のイベントに関連するオブジェクトの数は、イベントの性質により異なります:

  • On Load イベント - 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 Mouse Enter, On Mouse Move および On Mouse Leave イベントが選択されていると、これらのイベントはフォームオブジェクトごとに生成されます。これらがオブジェクトで有効にされている場合、イベントはこの オブジェクトに対してのみ生成されます。多層構造のオブジェクトの場合、上位レベルから下位レベルに向けてそのイベントを処理できるオブジェクトを探し、 最初に見つかったオブジェクトによりイベントが生成されます。OBJECT SET VISIBLE コマンドを使用して非表示にされたオブジェクトでは、これらのイベントは生成されません。オブジェクト入力中、他のオブジェクトはマウスの位置によりこの タイプのイベントを受け取るかもしれません。
    On Mouse Move イベントはマウスカーソルが動いたときだけではなく、ユーザーが変更キー(Shift, Shift Lock, Ctrl または Option)を押したときにも発生することに注意して下さい(これにより、ドラッグ&ドロップによるコピーや移動も管理できるようになります)。
  • リスト中のレコード: DISPLAY SELECTION / MODIFY 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 Page Change: このイベントはフォームレベルでのみ利用でき (フォームメソッド内でのみ使用します)、フォームのカレントページが変更されるたびに生成されます (FORM GOTO PAGE コマンドの呼び出しや標準ナビゲーションアクションに伴い)。ページが完全にロードされた後に呼び出されることに留意してください。 例えば (Webエリアを含む) すべてのオブジェクトが初期化された後です。このイベントはすべてのオブジェクトが初期化済みの状態で実行する必要のあるコードがあるときに有用です。ま たフォームがロードされたときにすべてのコードを実行するのではなく、特定のページが開かれたときにのみコードを実行するようにして、アプリケーションを 最適化できます。ユーザーがそのページを開かなければ、コードは実行されません。

以下の表はそれぞれのイベントごとにどのようにオブジェクトメソッドとフォームメソッドが呼ばれるかを概説します:

イベントオブジェクトメソッドフォームメソッドオブジェクト
On LoadOOすべてのオブジェクト
On UnloadOOすべてのオブジェクト
On ValidateOOすべてのオブジェクト
On ClickedO (クリック可能または入力可能なら) (*)O関係するオブジェクトのみ
On Double ClickedO (クリック可能または入力可能なら) (*)O関係するオブジェクトのみ
On Before KeystrokeO (入力可能なら) (*)O関係するオブジェクトのみ
On After KeystrokeO (入力可能なら) (*)O関係するオブジェクトのみ
On After EditO (入力可能なら) (*)O関係するオブジェクトのみ
On Getting FocusO (フォーカス可なら) (*)O関係するオブジェクトのみ
On Losing FocusO (フォーカス可なら) (*)O関係するオブジェクトのみ
On ActivateXONone
On DeactivateXONone
On Outside CallXONone
On Page ChangeXONone
On Begin Drag OverO (ドラッグ可なら) (**)O関係するオブジェクトのみ
On DropO (ドロップ可なら) (**)O関係するオブジェクトのみ
On Drag OverO (ドロップ可なら) (**)Never関係するオブジェクトのみ
On Mouse EnterOOすべてのオブジェクト
On Mouse MoveOOすべてのオブジェクト
On Mouse LeaveOOすべてのオブジェクト
On Mouse UpOX関係するオブジェクトのみ
On Menu SelectedXONone
On Bound variable changeXONone
On Data ChangeO (更新可なら)) (*)O関係するオブジェクトのみ
On Plug in AreaOO関係するオブジェクトのみ
On HeaderOOすべてのオブジェクト
On Printing DetailOOすべてのオブジェクト
On Printing BreakOOすべてのオブジェクト
On Printing FooterOOすべてのオブジェクト
On Close BoxXONone
On Display DetailOOすべてのオブジェクト
On Open DetailX (ただしリストボックス以外)Yesリストボックスのみ
On Close DetailX (ただしリストボックス以外)Yesリストボックスのみ
On Open DetailXONone
On Close DetailXONone
On ResizeXONone
On Selection ChangeO (***)O関係するオブジェクトのみ
On Load RecordXONone
On TimerXONone
On ScrollOX関係するオブジェクトのみ
On Before Data EntryO (リストボックス)X関係するオブジェクトのみ
On Column MovedO (リストボックス)X関係するオブジェクトのみ
On Row MovedO (リストボックス)X関係するオブジェクトのみ
On Column ResizeO (リストボックスと4D View Proエリア)X関係するオブジェクトのみ
On Header ClickO (リストボックスと4D View Proエリア)X関係するオブジェクトのみ
On Footer ClickO (リストボックス)X関係するオブジェクトのみ
On After SortO (リストボックス)X関係するオブジェクトのみ
On Long ClickO (3D ボタン)O関係するオブジェクトのみ
On Alternative ClickO (3D ボタンとリストボックス)X関係するオブジェクトのみ
On ExpandO (階層リストとリストボックス)X関係するオブジェクトのみ
On CollapseO (階層リストとリストボックス)X関係するオブジェクトのみ
On Delete ActionO (階層リストとリストボックス)X関係するオブジェクトのみ
On URL Resource LoadingO (Web エリア)X関係するオブジェクトのみ
On Begin URL LoadingO (Web エリア)X関係するオブジェクトのみ
On URL Loading ErrorO (Web エリア)X関係するオブジェクトのみ
On URL FilteringO (Web エリア)X関係するオブジェクトのみ
On End URL LoadingO (Web エリア)X関係するオブジェクトのみ
On Open External LinkO (Web エリア)X関係するオブジェクトのみ
On Window Opening DeniedO (Web エリア)X関係するオブジェクトのみ
On VP ReadyO (4D View Pro エリア)O関係するオブジェクトのみ
On Row ResizeO (4D View Pro エリア)O関係するオブジェクトのみ

(*) 詳細は後述の "イベント、オブジェクト、プロパティ" を参照
(**) 詳細は"ドラッグ&ドロップ"を参照
(***) リストボックス、階層リスト、サブフォーム型のオブジェクトのみがこのイベントをサポートします

重要: イベントに対応するプロパティが選択されている場合にのみ、フォームやオブジェクトのメソッドが呼び出されることに留意してください。デザインモードの フォームエディタのプロパティリストでイベントを無効にすると、メソッドが呼び出される回数を減らすことができ、フォームの実行速度を最適化できます。

警告: オブジェクトのOn Load と On Unload イベントが生成されるには、オブジェクトとオブジェクトが属するフォームの両方で有効にされていなければなりません。オブジェクトのみでイベントが有効に なっている場合、イベントは生成されません。これら2つのイベントはフォームレベルでも有効にされていなければなりません。

イベント、オブジェクト、プロパティ

イベントの性質やプロパティに基づき、オブジェクトに対してイベントが生成されるとオブジェクトメソッドが呼び出されます。ここでは、さまざまなタイプのオブジェクトを扱うにあたり、一般的に使用されるイベントについて詳細に説明します。

フォームエディタのプロパティリストには、選択されたオブジェクトあるいはフォームで利用可能なイベントのみが表示されることに留意してください。

クリック可能なオブジェクト

クリック可能なオブジェクトは主にマウスで操作します。以下のオブジェクトが含まれます:

  • ブールの入力可能フィールド/変数
  • ボタン, デフォルトボタン, ラジオボタン, チェックボックス, ボタングリッド
  • 3D ボタン, 3D ラジオボタン, 3D チェックボックス
  • ポップアップpメニュー, 階層ポップアップメニュー, ピクチャメニュー
  • ドロップダウンリスト, メニュー/ドロップダウンリスト
  • スクロールエリア, 階層リスト, リストボックス, リストボックスカラム
  • 非表示ボタン, ハイライトボタン, ラジオピクチャ
  • サーモメータ, ルーラ, ダイアル (スライダオブジェクト)
  • タブコントロール
  • スプリッタ

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イベントが生成されます。
  • スライダオブジェクト (サーモメータ, ルーラ, ダイアル) - 表示フォーマットでコントロールをスライド中にオブジェクトメソッドが呼び出されるように設定されていると、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コマンドを使用して、低レベルでデータ入力をフィルタできます。

キーボード入力可能なオブジェクトやデータタイプには以下が含まれます:

  • 文字、テキスト、日付、時間、数値、そしてピクチャ(On After Edit のみ) など、すべての入力可能なフィールドオブジェクト
  • 文字、テキスト、日付、時間、数値、そしてピクチャ(On After Edit のみ) など、すべての入力可能な変数
  • コンボボックス
  • リストボックス

注: 4D v14以降、テキスト(テキスト、日付、時間、数字型)が含まれる入力可能なフィールドおよび変数は On Clicked と On Double Clicked イベントを生成するようになりました。

注: 階層リストは入力可能なオブジェクトですが、このオブジェクトではOn After Edit, On Before KeystrokeそしてOn After Keystrokeは管理されません (後述の “階層リスト” の段落を参照)。

  • On Before Keystroke と On After Keystroke注: On After Keystroke イベントは、一般的に On After Edit イベントで置き換えることができます(詳細後述)。

On Before Keystroke と On After Keystroke イベントプロパティを選択したら、Form event codeコマンドを使用して返される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 Selection Change:
    (入力可であるかそうでないかに関わらず)テキストフィールドや変数に適用されると、このイベントはカーソルの位置が変わるたびに生成されます。例えばユーザーがマウスやキーボードの矢印キーをを使用してテキストを選択したときや、ユーザーがテキストを入力したときです。ここでGET HIGHLIGHTのようなコマンドを呼び出すことができます。
変更可能オブジェクト

更新可能オブジェクトは、マウスやキーボードを使用して値を変更することのできるデータソースを持ちます。これらは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 Alternative Click: いくつかの3D ボタンスタイルには、ポップアップメニューをリンクし、矢印を表示させることができます。この矢印をクリックすると、ボタンの主たるアクションの代わりのアクションを提供するポップアップを表示します。
    4DではOn Alternative Click イベントを使用してこの動作を管理できます。このイベントはユーザが矢印をクリックすると、マウスボタンが押されてすぐに生成されます:
    - ポップアップメニューが分離されている場合、このイベントはボタン中で矢印のあるエリアがクリックされた場合のみ生成されます。
    - ポップアップメニューがリンクされている場合、このイベントはボタン上どこをクリックしても生成されます。このタイプのボタンではOn Long Clickイベントが生成されないことに注意してください。

以下の3D ボタン、3D ラジオボタン、および3D チェックボックスは“ポップアップメニューあり”プロパティをサポートします: なし, ツールバーボタン, べベル, 角の丸いべベルおよびOffice XPタイプ

リストボックス

リストボックス特有の様々な機能を管理するために様々なフォームイベントを使用できます:

  • On Before Data Entry: このイベントは、リストボックス中のセルが編集される直前に生成されます (入力カーソルが表示される前)。このイベントを使用して、例えば表示中と編集中で異なるテキストを表示させることができます。
  • On Selection Change: このイベントは、リストボックスの列や行の現在の選択が変更されるたびに生成されます。このイベントはレコードリストや階層リストでも生成されます。
  • On Column Moved: このイベントは、ユーザのドラッグ&ドロップでリストボックスの列が移動されたときに生成されます。ただし元の場所にドロップされた場合には生成されません。LISTBOX MOVED COLUMN NUMBERコマンドは列の新しい位置を返します。
  • On Row Moved: このイベントは、ユーザのドラッグ&ドロップでリストボックスの行が移動されたときに生成されます。ただし元の場所にドロップされた場合には生成されません。
  • On Column Resize: このイベントは、ユーザーによってリストボックス中の列幅が変更されたときに生成されます。4D v16以降、このイベントは"ライブ"にトリガーされます。つまり、対象となるリストボックスあるいはカラムがリサイズされている間はずっと継続して送信されつづけます。リサイズはユーザーによって手動で行われるか、あるいはリストボックスとそのカラムがフォームウィンドウ自身のリサイズの結果リサイズされる場合も含みます(手動によるフォームのリサイズあるいはRESIZE FORM WINDOWコマンドを使用したリサイズ)。
    注: On Column Resize イベントは"余白"カラムがリサイズされた場合にはトリガーされません(余白カラムについてのより詳細な情報については、リサイズオプションテーマ)を参照して下さい)。
  • On ExpandとOn Collapse: これらのイベントは階層リストボックスの行が展開されたり折りたたまれたときに生成されます。
  • On Header Click: このイベントは、リストボックス中の列ヘッダでクリックが行われると生成されます。この場合Self コマンドを使用すればクリックされた列ヘッダを知ることができます。右クリック (Windouws) やCtrl+クリック (Mac OS) を列や列ヘッダ上で行うと、On Clickedイベントが生成されます。Clickcount コマンドを使うことによって、ユーザーが行ったクリックの回数をテストすることができます。
    リストボックスで並び替え可プロパティが選択されている場合、$0に0または-1を渡して標準の並び替えを行うかどうか指定できます:
    - $0 = 0の場合、標準の並び替えが行われます。
    - $0 = -1の場合、標準の並び替えは行われず、ヘッダには並び替え矢印は表示されません。開発者は4Dの配列コマンドを使用して、カスタマイズされた条件に基づく並び替えを実行できます。
    並び替え可 プロパティが選択されていない場合、$0は使用されません。
  • On Footer Click: このイベントはリストボックスやリストボックス列で利用でき、リストボックスやリストボックス列のフッターエリアがクリックされたときに生成されます。こ の場合 OBJECT Get pointer コマンドはクリックされたフッター変数へのポインターを返します。イベントは左および右クリックどちらでも生成されます。Clickcountコマンドを使うことによって、ユーザーが行ったクリックの回数をテストすることができます。
  • On After Sort: このイベントは標準の並び替えが行われた直後に生成されます(ただしOn Header Clickイベントで$0に-1が返された場合には生成されません)。このメカニズムは、ユーザによって行われた最後の並び替えの方向を格納するために使用できます。このイベント内でSelfコマンドは、並び替えられたカラムヘッダー変数へのポインタを返します。
  • On Delete Action: このイベントはユーザーが削除キー (DeleteやBackspaceキー) を押して、またはクリア標準アクションが割り当てられたメニュー項目 (編集メニューのクリア等) を選択して、選択された行の削除を指示したときに生成されます。このイベントはリストボックスオブジェクトレベルでのみ利用できます。4Dはイベントの生 成を行うだけであることに留意してください。4Dは項目を消去しません。実際の削除処理や事前警告の表示などは開発者の責任です。
  • On Scroll (v15からの新機能): このイベントはユーザーがリストボックス内の列またはカラムをスクロールしたときに生成されます。このイベントはユーザーのアクションの結果としてスク ロールが発生した場合にのみ生成されます: スクロールバー/カーソルの使用、マウスホイールまたはキーボードの使用、等です。OBJECT SET SCROLL POSITIONコマンドの使用の結果スクロールした場合には生成されません。
    このイベントはスクロールアクションに関連した他の全てのユーザーイベント(On Clicked、On After Keystroke、等)の後にトリガーされます。このイベントはオブジェクトメソッドの中でのみ生成されます(フォームメソッドでは生成されません)。詳細は例題15を参照して下さい。
  • On Alternative Click (v15からの新機能): このイベントはオブジェクト配列型のリストボックスのカラムにおいて、ユーザーがウィジェットのエリプシスボタン("alternateButton" 属性)をクリックしたときに生成されます。詳細な情報については、カラム内でのオブジェクト配列の使用 のセクションを参照して下さい。

「セレクション」型のリストボックスのコンテキストにおいて、二つの一般的なイベントが使用できるようになりました:

  • On Open Detail: このイベントはレコードが「セレクション」型リストボックスに関連付けられた(まだ開かれていない)詳細フォームに表示されるときに生成されます。
  • On Close Detail: このイベントは「セレクション」型リストボックスに関連付けられた詳細フォームに表示されたレコードが閉じられるときに生成されます(レコードが変更されたかどうかは関係しません)。
階層リスト

汎用のイベントに加え、階層リスト上で行われるアクションを処理するために複数のイベントを使用できます:

  • On Selection Change: このイベントは、マウスクリックやキーストロークで階層リスト中の選択が変更されるたびに生成されます。
    このイベントはリストボックスやレコードリストでも生成されます。
  • On Expand: このイベントは、マウスクリックやキーストロークで階層リストの要素が拡げられるたびに呼び出されます。
  • On Collapse: このイベントは、マウスクリックやキーストロークで階層リストの要素が折りたたまれるたびに呼び出されます。
  • On Delete Action: このイベントはユーザーが削除キー (DeleteやBackspaceキー) を押して、またはユーザーがクリア標準アクションが割り当てられたメニュー項目 (編集メニューのクリア等) を選択して、選択された行の削除を指示したときに生成されます。このイベントはリストボックスオブジェクトレベルでのみ利用できます。4Dはイベントの生成を行うだけであることに留意してください。4Dは項目を消去しません。実際の削除処理や事前警告の表示などは開発者の責任です。

これらのイベントは相互に排他的ではなく、階層リスト中で連続して生成されることがあります:
- キーストロークに伴い (順に):

イベントコンテキスト
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クリックまたはダブルクリックでリストをアクティブにした
ピクチャーフィールドと変数
  • On Picture Scroll フォームイベントはユーザーが (フィールドや変数) エリア内のピクチャーをスクロールすると生成されます。ピクチャーエリアのサイズがピクチャーよりも小さく、かつ表示フォーマットが"トランケート (中央合わせなし)"に設定されている場合のみスクロールが可能です。この点についてはピクチャーフォーマットを参照してください。
    このイベントはスクロールがユーザーアクション (スクロールバーやカーソル、マウスホイール、キーボードの利用) の結果として行われた場合に生成されます (キーボードによるスクロールについてはスクロールバー参照)。OBJECT SET SCROLL POSITION コマンドの結果としてスクロールが行われた場合、イベントは生成されません。
    このイベントは、スクロールアクションに関連した他の全てのユーザーイベント(On Clicked、On After Keystroke、等)の後にトリガーされます。このイベントはオブジェクトメソッドの中でのみ生成されます(フォームメソッドでは生成されません)。例題14を参照してください。
  • (v16 からの新機能)ユーザーが、ピクチャーエリア(フィールドまたは変数)内でドラッグ中に左マウスボタンをリリースしたときにOn Mouse Up イベントが生成されます。このイベントは例えば、ユーザーにSVGエリア内でオブジェクトを移動、リサイズ、描画することを可能にしたい場合には有用です。
    On Mouse Upイベントが生成されると、マウスボタンがリリースされたローカルの座標を取得する事ができます。これらの座標はMouseXMouseY システム変数に返されます。座標はピクチャーの左上端(0, 0)からみた位置のピクセル単位で表示されます。
    このイベントを使用する場合、フォームのステートマネージャーが非同期の可能性がある場合を管理するために、Is waiting mouse upを呼び出す必要があります。これは例えばマウスボタンがリリースされる前にフォーム上にアラートダイアログボックスが表示された場合などです。On Mouse Up イベントのより詳細な情報と使用例については、Is waiting mouse upコマンドの詳細を参照して下さい。
    注: ピクチャーオブジェクトの"ドラッグ可能"オプションがチェックされていた場合、On Mouse Up イベントはいかなる場合も生成されません。
サブフォーム

サブフォームコンテナオブジェクト (親フォーム上に置かれた、ひとつのサブフォームインスタンスを含むオブジェクト) は以下のイベントをサポートします:

  • On Load と On Unload: サーブフォームを開くまた閉じる際にそれぞれ生成されます。これらのイベントは親フォームレベルでも有効にされていなければなりません。これらのイベント は親のフォームの同じイベントよりも前に生成される点に留意してください。またフォーイベント動作の原則にいたがい、サブフォームが0もしくは1ページ以 外のページに配置されている場合、これらのイベントはページが閉じられ開かれるときにに生成され、フォームが開かれ閉じられるときではないことに留意して ください。
  • On Validate: サブフォーム中でデータの受け入れを行う際。
  • On Data Change: サブフォームオブジェクト変数の値が更新されたとき。
  • On Getting Focus and On Losing Focus: サブフォームコンテナがフォーカスを得たとき、また失った時。これらのイベントはプロパティリスト中でチェックされていれば、サブフォームオブジェクトの メソッド内で生成されます。これらはサブフォームのフォームメソッドに送信されます。つまり例えば、フォーカスに応じてサブフォーム中のナビゲーションボ タンの表示を管理できます。
    サブフォームオブジェクトはそれ自身がフォーカスを持つ点に留意してください。
  • On Bound Variable Change: この特別なイベントは、親フォーム中のサブフォームにバインドされた変数に割り当てられた値が更新される (同じ値が割り当てられたばあいでも) 、かつサブフォームがカレントフォームページまたは0ページに属していれば、サブフォームメソッドのコンテキストで生成されます。サブフォームの管理につ いてはDesign Referenceマニュアルを参照してください。

**注: CALL SUBFORM CONTAINER コマンドを使用して、サブフォーム内で生成可能なあらゆるカスタムイベントタイプを指定できます。このコマンドにより、コンテナオブジェクトメソッドを呼び出し、イベントコードを渡すことができます。

次のイベントはサブフォームのフォームメソッドにも受け取られます:

  • On Clicked と On Double Clicked - サブフォーム内で生成されたこれらのイベントは、まずサブフォームのフォームメソッドに受け取られ、つぎに親フォームのフォームメソッドに受け取られます。
  • On Resize - 親フォームにおいてサブフォームオブジェクトのサイズが変更された場合に、このイベントはサブフォームのフォームメソッドに受け取られます。
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を知ることができます。
4D View Pro エリア

4D View Pro エリアでは以下のイベントが利用可能です。

  • On After Edit: このイベントは、4D View Pro エリアで編集が行われたあとに生成されます。
  • On Clicked: このイベントは、4D View Pro エリアのビューポート(ヘッダー、スクロールバー、ツールバー以外の部分)でクリックが発生したときに生成されます。
  • On Column Resize: このイベントはカラムの幅がユーザーによって変更されたときに生成されます。
  • On Double Clicked: このイベントは4D View Pro エリア内でダブルクリックが発生したときに生成されます。
  • On Header Click:このイベントはカラムヘッダーまたは行ヘッダーでクリックが発生したときに生成されます。
  • On Row Resize: このイベントは行の高さがユーザーによって変更されたときに生成されます。
  • On Selection Change: このイベントは行またはカラムのカレントセレクションが変更されたときに生成されます。
  • On VP Ready このイベントは4D View Pro エリアのロードが終わった時に生成されます。このイベントはエリアの初期化コードを書く際に必要になります。

これらのイベントの詳細な情報については、On VP Ready フォームイベント の章を参照してください。

例題 1

この例題ではレコード更新日をOn Validateイベントで自動的に割り当てる例を示します:

  // フォームメソッド Form method [#Current_title_incode] Sum Form event code
 Case of
  // ...
    :(Form event code=On Validate)
       [aTable]Last Modified On:=Current date
 End case

例題 2

この例題では、ドロップダウンリスト処理 (初期化, ユーザクリック, オブジェクトのリリース) をオブジェクトメソッドにカプセル化します:

  // 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

例題 3

この例題ではオブジェクトメソッドで、ピクチャのみを受け付けるフィールドのドラッグ&ドロップ処理の方法を示します:

  // [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 コマンドの例題を参照してください。

例題 4

この例題はフォームメソッドのテンプレートです。出力フォームとしてサマリレポートがフォームを使用する際に発生するイベントを示しています:

  // 概要レポートの出力フォームとして使用されているフォームのフォームメソッド
 $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

例題 5

この例題は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)

例題 6

On Before Keystroke と On After Keystroke イベントを処理する方法はGet edited textKeystroke、そしてFILTER KEYSTROKEコマンドの説明を参照してください。

例題 7

この例題は、スクロールエリアでクリックとダブルクリックを同様に扱う方法を示しています:

  // 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

例題 8

この例題では、クリックとダブルクリックで異なるレスポンスをする方法を示します。要素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

例題 9

この例題では、 On Getting Focus と On Losing Focusを使用して、フォームメソッド内でステータス情報を管理します:

  // [Contacts];"Data Entry" フォームメソッド
 Case of
    :(Form event code=On Load)
       var vtStatusArea : Text
       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

例題 10

この例題では、レコードデータ入力に使用されるフォームで、ウィンドウを閉じる際の処理を示します:

  // 入力フォームのフォームメソッド
 $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

例題 11

この例題では、文字フィールドが更新されるたびに、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

例題 12

この例題では、文字フィールドが更新されるたびに、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

例題 13

以下の例題では階層リストで削除アクションを管理する方法を示します:

 ... // 階層リストメソッド
:(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

例題 14

この例題では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

結果:

例題 15

リストボックスで選択されたセルの周りに赤い長方形を描画し、リストボックスがユーザーによって垂直方向にスクロールされた場合には、その長方形を一緒に移動させたい場合を考えます。その場合、リストボックスのオブジェクトメソッドに対して以下のように書きます:

 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