Delphi - 捕获当前焦点的窗口/窗体

时间:2011-06-27 16:19:28

标签: delphi vcl tform

我有一个MDI应用程序,其中包含许多MDI子项(以及非MDI表单),并希望跟踪当前激活的表单,并始终关注。当用户在应用程序中从一种形式切换到另一种形式时,我想捕获窗口激活消息,并在后台设置一个全局变量到一个活动形式的属性(该属性继承自基类)。我最初将代码放在基类的OnActivate事件处理程序中(我的应用程序中的所有表单都使用)但是已经注意到这个事件并不总是被引发。有任何想法吗?

我正在使用Delphi 2006 BDS。

2 个答案:

答案 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;