我有一個MDI應用程序,它有許多MDI子窗體(也是非MDI窗體),並且想要跟蹤哪個窗體當前處於激活狀態並始終處於焦點位置。當用戶在應用程序中從一種窗體切換到另一種窗體時,我想捕獲窗口激活消息,並在後臺將全局變量設置爲活動窗體的屬性(此屬性從基類繼承)。我最初將代碼放在基類的OnActivate事件處理程序中(我的應用程序中使用了所有表單),但是注意到這個事件並不總是會引發。有任何想法嗎?德爾福 - 捕獲當前焦點的窗口/窗體
我正在使用Delphi 2006 BDS。
我有一個MDI應用程序,它有許多MDI子窗體(也是非MDI窗體),並且想要跟蹤哪個窗體當前處於激活狀態並始終處於焦點位置。當用戶在應用程序中從一種窗體切換到另一種窗體時,我想捕獲窗口激活消息,並在後臺將全局變量設置爲活動窗體的屬性(此屬性從基類繼承)。我最初將代碼放在基類的OnActivate事件處理程序中(我的應用程序中使用了所有表單),但是注意到這個事件並不總是會引發。有任何想法嗎?德爾福 - 捕獲當前焦點的窗口/窗體
我正在使用Delphi 2006 BDS。
全球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;
您是什麼意思焦點。如果您的意思是輸入焦點,那麼您可以調用Windows.GetFocus,將結果傳遞給FindControl,並最終遍歷父層次結構,直到到達表單。 –
@David:我會說,直到你找到層次結構的頂部(Parent = nil)。表單可以嵌入框架內框架內的框架內... –
@Marjan好點。 –