Form event

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11.2 (Modified)


Form event 数値

引数説明
このコマンドには、引数はありません。
戻り値数値フォームイベント番号

説明

Form eventコマンドは、現在生成中のフォームイベントタイプを示す数値を返します。通常フォームやオブジェクトメソッド内でForm event関数を使用します。

4D には事前に“Form Events”テーマで定義された定数が用意されており、Form eventから返される値と比較することができます。

イベントには、一般的なイベント(任意のタイプのオブジェクトに対して生成される)と、特定タイプのオブジェクトのみに発生するイベントがあります。

一般的なイベント

次のイベントは任意のフォームまたはオブジェクトに対して生成されます。:

定数説明
On Load1フォームが表示または印刷されようとしている
On Unload24フォームを閉じる、あるいは解放しようとしている
On Validate3レコードのデータ入力が検証された
On Clicked4オブジェクト上でクリックされた
On Double Clicked13オブジェクト上でダブルクリックされた
On Before Keystroke17フォーカスのあるオブジェクトに文字が入力されようとしている
Get edited text はこの文字を含まないオブジェクトのテキストを返す
On After Keystroke28フォーカスのあるオブジェクトに文字が入力されようとしている
Get edited text はこの文字を含むオブジェクトのテキストを返す
On After Edit45フォーカスのあるオブジェクトの内容が更新された
On Getting Focus15フォームオブジェクトがフォーカスを得た
On Losing Focus14フォームオブジェクトがフォーカスを失った
On Activate11フォームウィンドウが最前面のウィンドウになった
On Deactivate12フォームウィンドウが最前面のウィンドウでなくなった
On Outside Call10フォームがCALL PROCESSによる呼び出しを受けた
On Drop16データがオブジェクトにドロップされた
On Drag Over21データがオブジェクト上にドロップされる可能性がある
On Begin Drag Over46オブジェクトがドラッグされている
On Mouse Enter35マウスカーソルがオブジェクトの描画エリア内に入った
On Mouse Move37マウスカーソルがオブジェクトの描画エリア上で (最低1ピクセル) 動いた
On Mouse Leave36マウスカーソルがオブジェクトの描画エリアから出た
On Menu Selected18メニュー項目が選択された
On Data Change20オブジェクトのデータが変更された
On Plug in Area19外部オブジェクトのオブジェクトメソッドの実行がリクエストされた
On Header5フォームのヘッダエリアが印刷あるいは表示されようとしている
On Printing Detail23フォームの詳細エリアが印刷されようとしている
On Printing Break6フォームのブレークエリアのひとつが印刷されようとしている
On Printing Footer7フォームのフッタエリアが印刷されようとしている
On Close Box22ウィンドウのクローズボックスがクリックされた
On Display Detail8レコードがリスト中に表示されようとしている
On Open Detail25レコードがダブルクリックされて、入力フォームを開こうとしている
On Close Detail26入力フォームから離れ、出力フォームに移動しようとしている
On Selection Change31・リストボックス: 現在の行や列の選択が変更された
・リスト中のレコード: リストフォームまたはサブフォームにおいて、カレントレコードあるいはカレントセレクションの行選択が変更された
・階層リスト: リスト中の選択がクリックやキーストロークなどで変更された
On Load Record40リスト更新中、更新中にレコードがロードされた (ユーザがレコード行をクリックし、フィールドが編集モードになった)
On Timer27SET TIMER コマンドで設定した時間が経過した
On Resize29フォームウィンドウがリサイズされた

List box

以下のイベントはリストボックスでのみ生成されます:

定数説明
On Before Data Entry41リストボックスセルが編集モードに変更されようとしている
On Column Moved32リストボックスの列がユーザのドラッグ&ドロップで移動された
On Row Moved34リストボックスの行がユーザのドラッグ&ドロップで移動された
On Column Resize33リストボックスの列幅が変更された
On Header Click42リストボックスの列ヘッダでクリックが行われた
On After Sort30リストボックスの列中で標準のソートが行われた

3D ボタン

以下のイベントは3D ボタンでのみ生成されます:

定数説明
On Long Click393D ボタンがクリックされ、特定の時間以上マウスボタンが押され続けている
On Arrow Click383D ボタンの“三角” エリアがクリックされた

階層リスト

以下のイベントは階層リストでのみ生成されます:

定数説明
On Expand43クリックやキーストロークで階層リストの要素が展開された
On Collapse44クリックやキーストロークで階層リストの要素が折りたためられた

Web エリア

以下のイベントはWeb エリアでのみ生成されます:

定数説明
On URL Resource Loading48新しいリソースがWeb エリアにロードされた
On Begin URL Loading47新しいURLがWeb エリアにロードされた
On URL Loading Error50URLをロード中にエラーが発生した
On URL Filtering51Web エリアがURLをブロックした
On End URL Loading49URLのすべてのリソースがロードされた
On Open External Link52外部URLがブラウザで開かれた
On Window Opening Denied53ポップアップウィンドウがブロックされた

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

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

On Load イベント - On Loadオブジェクトイベントプロパティが選択されている、フォームのすべてのページのすべてのオブジェクトのオブジェクトメソッドが呼び出されます。そしてフォームメソッドが呼び出されます。

On ActivateOn Resize イベント - これらのイベントは個々のオブジェクトには適用されず、フォームに適用されるため、オブジェクトメソッドは呼び出されません。ゆえに、On Activate フォームイベントプロパティが選択されてれば、そのフォームメソッドのみが呼び出されます。

On Timer イベント - このイベントは事前にSET TIMER コマンドが使用された場合にのみ生成されます。On Timer フォームイベントプロパティが選択されていると、フォームメソッドのみがイベントを受け取ります。オブジェクトメソッドは呼び出されません。

On Drag Over イベント - "ドロップ可"プロパティが選択されていれば、イベント中で関連するドロップ可能なオブジェクトのみオブジェクトメソッドが呼び出されます。フォームメソッドは呼び出されません。

・逆にOn Begin Drag Overイベントについては、ドラッグされているオブジェクトのオブジェクトメソッドやフォームメソッドが呼び出されます ("ドラッグ可"プロパティが選択されていれば)。

警告: 他のすべてのイベントと異なり、On Begin Drag OverOn 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 DetailOn 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 LoadOn Unload イベントが生成されるには、オブジェクトとオブジェクトが属するフォームの両方で有効にされていなければなりません。オブジェクトのみでイベントが有効になっている場合、イベントは生成されません。これら2つのイベントはフォームレベルでも有効にされていなければなりません。

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


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

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

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

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

・ブールの入力可能フィールド/変数

・ボタン, デフォルトボタン, ラジオボタン, チェックボックス, ボタングリッド

・3D ボタン, 3D ラジオボタン, 3D チェックボックス

・ポップアップpメニュー, 階層ポップアップメニュー, ピクチャメニュー

・ドロップダウンリスト, メニュー/ドロップダウンリスト

・スクロールエリア, 階層リスト, リストボックス

・非表示ボタン, ハイライトボタン, ラジオピクチャ

・サーモメータ, ルーラ, ダイアル (スライダオブジェクト)

・タブコントロール

・スプリッタ

On ClickedOn 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 KeystrokeOn After Keystroke

Note: 4Dのバージョン2004.2より、On After Keystrokeイベントは一般的にOn After Editに置き換えます。

On Before KeystrokeOn After Keystroke イベントプロパティを選択したら、Form event コマンドを使用して返されるOn Before KeystrokeOn After Keystrokeイベントを検知し、オブジェクトへのキーストロークを処理できます (詳細は Get edited text コマンドの説明を参照してください。これらのイベントはPOST KEYのようなユーザアクションをシミュレートするコマンドによっても生成されます。

キーボードを使用せず、ペーストやドラッグ&ドロップなどで行われた変更は考慮されないことに留意してください。これらのイベントを処理するためにはOn After Editを使用します。

Note: On Before KeystrokeOn After Keystroke イベントは入力メソッド (IME) 使用時は生成されません。入力メソッドはプログラムあるいはシステムコンポーネントで、日本語や中国語など特定の文字や記号を入力するために使用されます。

On After Edit

このイベントは、変更が行われた方法には関係なく、入力可能オブジェクトの内容に変更が行われるたびに生成されます。例えば:

- ペーストやカット、削除、キャンセルなどの標準の編集アクション

- 値のドロップ (ペーストと同様のアクション)

- ユーザが行ったキーボードからの入力。この場合On After EditイベントはOn Before KeystrokeOn 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 FocusOn losing Focus オブジェクトイベントプロパティを選択したら、Form event コマンドから返されるOn Getting FocusOn 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-&gt; または &;-<矢印キーを使用してサブリストを開いた/閉じた
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 OverOn 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 SELECTIONMODIFY 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 KeystrokeOn After Keystroke イベントを処理する方法はGet edited text, KeystrokeFILTER 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 FocusOn 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.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次