我编写了一个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/