私はApplication.OnActivateの動作をテストするためにD7アプリケーションを作成しました。 MainForm.FormCreate - - MainForm.FormCreate - - エンド
3 - MainFormを
2を開始
1:Delphi 7でのApplication.OnActivateの予期しない動作
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の - MainForm.ShowWidthsHeights - -
4を開始MainForm.ShowWidthsHeights - - エンド
6 - MainForm.AppActivate - エンド
5を開始します
これは正しいです。私は、タスクバーにショートカットをクリックした場合
はしかし、これらの4行はMEMO1に追加されます。
7 - MainForm.AppActivate - MainForm.ShowWidthsHeights - -
8を開始しますMainForm.ShowWidthsHeights -
9を開始します - 終了
10 - MainForm.AppActivate - 終了
なぜD7はそれをしますか?
私のアプリケーションは有効化されていませんが、無効化されています。 Application.OnDeactivateイベントも発射されるかどうかをテストするために
、私は、このイベントハンドラを追加:起動した後
Application.OnDeactivate := AppDeactivate;
:
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にこのステートメントを追加しますアプリケーション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
したがって、私のアプリケーションは無効化されてから有効化され、再び無効化されます。
これはかなり混乱しています!
DelphiはWindowsがあなたのアプリケーションに送る 'WM_ACTIVATEAPP'メッセージをあなたに反映しています。なぜWindowsがそうしているのかわかりません。 –
タスクバーのボタンで*を最初にクリックすると(フォームを最小にすると思われる)、メモを見るためにもう一度クリックしたときに7〜10がログに記録されることは確実ですか?メモにロギングするのではなく、 'OutputDebugString'と 'Event Log'(ctrl + alt + v)を使うことができます。 –
@Sertacええ、私はこれをすでにチェックしました。それはまさにQで説明されている通りです。 –