我有一个MDI应用程序,其中包含许多MDI子项(以及非MDI表单),并希望跟踪当前激活的表单,并始终关注。当用户在应用程序中从一种形式切换到另一种形式时,我想捕获窗口激活消息,并在后台设置一个全局变量到一个活动形式的属性(该属性继承自基类)。我最初将代码放在基类的OnActivate事件处理程序中(我的应用程序中的所有表单都使用)但是已经注意到这个事件并不总是被引发。有任何想法吗?
我正在使用Delphi 2006 BDS。
答案 0 :(得分:5)
您正在寻找ActiveMDIChild属性吗?
答案 1 :(得分:3)
全局Screen
变量会跟踪所有表单。 Screen.ActiveCustomForm
指向具有焦点的表单,Screen.OnActiveFormChange
是每次焦点更改为另一个表单时触发的事件。您可以在其事件处理程序中更新您的属性:
type
TMainForm = class(TForm)
...
private
procedure ActiveFormChanged(Sender: TObject);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Screen.OnActiveFormChange := ActiveFormChanged;
end;
procedure TMainForm.ActiveFormChanged(Sender: TObject);
begin
{ Do what you want to do }
end;