Application.OnActivate の動作をテストする D7 アプリケーションを作成しました。
これは関連部分です:
procedure TMainForm.FormCreate (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.FormCreate - Begin');
Application.OnActivate := AppActivate;
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.FormCreate - End');
end;
procedure TMainForm.AppActivate (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppActivate - Begin');
ShowWidthsHeights (Sender);
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppActivate - End');
end;
procedure TMainForm.ShowWidthsHeights (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.ShowWidthsHeights - Begin');
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.ShowWidthsHeights - End');
end;
アプリケーションを起動した後、Memo1 の内容
は
次
の
とおり
です
。 AppActivate - 終了
それは正しいです 。
しかし、タスクバーのショートカットをクリックすると、次の 4 行が Memo1 に追加されます:
7 - MainForm.AppActivate - Begin
8 - MainForm.ShowWidthsHeights - Begin
9 - MainForm.ShowWidthsHeights - End
10 - MainForm.AppActivate - End
なぜD7はそうするのですか?
私のアプリケーションはアクティブ化されていません。逆に、非アクティブ化されています。
Application.OnDeactivate イベントも発生するかどうかをテストするために、次のイベント ハンドラを追加しました。
procedure TMainForm.AppDeactivate(Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppDeactivate - Begin');
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppDeactivate - End');
end;
そして、このステートメントを TMainForm.FormCreate に追加しました:
Application.OnDeactivate := AppDeactivate;
アプリケーションの起動後、Memo1 には元のケースと同じ 6 行が含まれていましたが、タスクバーのショートカットをクリックすると、Memo1 に 8 行が追加されました。
7 - MainForm.AppDeactivate - Begin
8 - MainForm.AppDeactivate - End
9 - MainForm.AppActivate - Begin
10 - MainForm.ShowWidthsHeights - Begin
11 - MainForm.ShowWidthsHeights - End
12 - MainForm.AppActivate - End
13 - MainForm.AppDeactivate - Begin
14 - MainForm.AppDeactivate - End
したがって、私のアプリケーションは非アクティブ化され、次にアクティブ化され、その後再び非アクティブ化されます!
それはかなり紛らわしいです!