


 
 
 
 
 
 
 |
Delphi2010 アプリケーションイベント(ApplicationEvents) 2010/09/12 |
前回は[Additional]内の「ControlBar」(コントロールバー)について見ましたので、今回は同じく[Additional]内の「ApplicationEvents」(アプリケーションイベント)について見てみます。アプリケーションイベントは Delphi6 にもあります。
アプリケーションイベントは、フォームに配置することにより、アプリケーションイベント(Application オブジェクト)は全てのイベントをインターセプト(割り込み)して受け取ります。
これまで使った事がないのでよく分かりませんから取り合えず配置してみます。1つ目ですので Nameプロパティは「ApplicationEvents1」となります。
例として、ツールボタンをクリックしたら、別フォームを開くようにしてみます。メニュー「ファイル」→「新規作成」→「フォーム」を行うと、新しいフォーム画面 Form2 が作成されますので、取り合えずテストなのでテキトウに下記のようにしてみます。
「ファイル」→「名前を付けて保存」を行い、Unit2.pas として保存します。
Unit1.pas の<コードエディタ>に切り替えて、冒頭の uses節に Unit2 を追加します。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, ExtCtrls, AppEvnts, Unit2; |
ツールバー ToolBar1 内の ツールボタン ToolButton1 を押した時のイベントハンドラ OnClick を実装します。<フォームデザイナ>の[ToolButton1]をダブルクリック、或いは、<オブジェクトインスペクタ>の OnClick 欄をダブルクリックして以下のように記述します
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
Form2.ShowModal ;
end; |
上記で作成した Form2(Unit2.pas)をモーダル画面として表示させるだけです。保存・コンパイル(再構築)・実行をして、ツールボタンをクリックすると下記のようになります。
モーダル画面ですので Form2 が表示されている間は、Form1 を操作する事は出来ません。右上の[×]をクリックして閉じて下さい。そして Form1 の右上の[×]をクリックして終了させて下さい。
それでは、アプリケーションイベントの実装のテストをしてみます。
<フォームデザイナ>で ApplicationEvents1 をクリックして選択し、<オブジェクトインスペクタ>で OnModalBeginイベント欄をダブルクリックし、下記のように記述します。
procedure TForm1.ApplicationEvents1ModalBegin(Sender: TObject);
begin
ShowMessage('モーダルな画面を開きました');
end; |
同様に、<オブジェクトインスペクタ>で OnModalEndイベント欄をダブルクリックし、下記のように記述します。
procedure TForm1.ApplicationEvents1ModalEnd(Sender: TObject);
begin
ShowMessage('モーダルな画面を閉じました');
end; |
保存・コンパイル(再構築)・実行をして、ツールボタンをクリックすると下記のようになります。

ツールボタンを押します
↓

[OK]を押します
↓

閉じます
↓

[OK]を押します
↓

元の画面に戻ります
以上で分かるように、アプリケーションイベントの OnModalBeginイベントハンドラでは、モーダル画面を開く直前に割り込みが行われて実行され、 OnModalEndイベントハンドラでは、モーダル画面を閉じた時に割り込みが行われて実行されます。
「Form2.ShowModal」を「Form2.Show」として、モーダル画面表示ではなくモードレス画面表示にすると、上記の割り込みは発生しません。
アプリケーションイベントの割り込み用イベントは<オブジェクトインスペクタ>では下記のようなものがあります。(以下、ヘルプより)
OnActionExecute | アクションの Execute メソッドが呼び出され,アクションリストがそれをまだ処理していないときに発生します。 |
OnActionUpdate | アクションの Update メソッドが呼び出され,アクションリストがまだアクションを処理していないときに発生します。 |
OnActivate | アプリケーションがアクティブになったときに発生します。 |
OnDeactivate | アプリケーションが非アクティブになったときに発生します。 |
OnException | 未処理の例外がアプリケーションで生成されたときに発生します。 |
OnHelp | アプリケーションがヘルプに対する要求を受け取ったときに発生します。 |
OnHint | ヘルプヒントを表示するコントロールまたはメニュー項目の上にマウスポインタが移動したときに発生します。 |
OnIdle | アプリケーションがアイドル状態になったときに発生します。 |
OnMessage | アプリケーションが Windows メッセージを受信したときに発生します。 |
OnMinimize | アプリケーションが最小化されたときに発生します。 |
OnModalBegin | モーダル フォームを開くときに発生します。 |
OnModalEnd | モーダル フォームを閉じるときに発生します。 |
OnRestore | 最小化されているアプリケーションを元のサイズに戻したときに発生します。 |
OnSettingChange | システム全般の設定が変更されたことを Windows がアプリケーションに通知したときに発生します。 |
OnShortCut | ユーザーがキーを押したときに(OnKeyDown イベントの前に)発生します。 |
OnShowHint | ヘルプヒントのヒントウィンドウが表示されようとしているときに発生します。 |
その他、以下のメソッドがあるようです。
Activate | 現在のコンポーネントがアプリケーションのイベントを最初に受け取るようにします。 |
CancelDispatch | ほかの TCustomApplicationEvents の下位オブジェクトが現在のイベントを受け取らないようにします。 |
こういったイベントが発生したときに何か特別な処理を一括して行いたい場合に利用出来そうです。
その他、<オブジェクトインスペクタ>をざっと見てみましたが、別段、気になるような項目は無いようです。(NameプロパティとTagプロパティしかありませんが)
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/09/11
2010/09/12
▼2010/09/13
シェアウェア
Script!World
データベース
|