Delphi - захват окна / формы, которая в данный момент находится в фокусе - PullRequest
2 голосов
/ 27 июня 2011

У меня есть приложение MDI с многочисленными дочерними MDI (а также формами, не относящимися к MDI), и я хотел бы отследить, какая форма активирована в данный момент и находится в фокусе постоянно.Когда пользователь переключается из одной формы в другую в приложении, я хотел бы перехватить сообщение об активации окна и установить в фоновом режиме глобальную переменную для свойства активной формы (это свойство наследуется от базового класса).Первоначально я поместил код в обработчик события OnActivate для базового класса (который используют все формы в моем приложении), но заметил, что это событие не всегда возникает.Есть идеи?

Я использую BDS Delphi 2006.

Ответы [ 2 ]

5 голосов
/ 27 июня 2011

Является ли свойство ActiveMDIChild тем, что вы ищете?

3 голосов
/ 29 июня 2011

Глобальная переменная 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;
...