2

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

我正在使用 Delphi 2006 BDS。

4

2 回答 2

5

ActiveMDIChild 属性是您正在寻找的吗?

于 2011-06-27T16:58:03.297 回答
4

全局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;
于 2011-06-29T12:58:15.460 回答