我编写了一个D7应用程序来测试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的内容为:
1-MainForm.FormCreate-开始
2-MainForm.FormCreate-结束
3-MainForm.AppActivate-开始
4-MainForm.ShowWidthsHeights-开始
5-MainForm.ShowWidthsHeights-结束
6-MainForm.AppActivate-结束

那是对的 。

但是,如果我然后单击任务栏中的快捷方式,则会将这4行添加到Memo1中:
7-MainForm.AppActivate-开始
8-MainForm.ShowWidthsHeights-开始
9-MainForm.ShowWidthsHeights-结束
10-MainForm.AppActivate-结束

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

因此,我的应用程序被停用,然后被激活,然后再次被停用!
真是令人困惑!

最佳答案

正如David的评论所述,它反射(reflect)了WM_ACTIVATE消息的接收。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms632614(v=vs.85).aspx给出答案:



消息的参数进一步说明:

wParam:

关于delphi - Delphi 7中Application.OnActivate的异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11223297/

10-14 18:20