2011-06-27 51 views
2

我有一個MDI應用程序,它有許多MDI子窗體(也是非MDI窗體),並且想要跟蹤哪個窗體當前處於激活狀態並始終處於焦點位置。當用戶在應用程序中從一種窗體切換到另一種窗體時,我想捕獲窗口激活消息,並在後臺將全局變量設置爲活動窗體的屬性(此屬性從基類繼承)。我最初將代碼放在基類的OnActivate事件處理程序中(我的應用程序中使用了所有表單),但是注意到這個事件並不總是會引發。有任何想法嗎?德爾福 - 捕獲當前焦點的窗口/窗體

我正在使用Delphi 2006 BDS。

+0

您是什麼意思焦點。如果您的意思是輸入焦點,那麼您可以調用Windows.GetFocus,將結果傳遞給FindControl,並最終遍歷父層次結構,直到到達表單。 –

+2

@David:我會說,直到你找到層次結構的頂部(Parent = nil)。表單可以嵌入框架內框架內的框架內... –

+0

@Marjan好點。 –

回答

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; 
5

ActiveMDIChild屬性是你在找什麼?

+0

感謝您的輸入的傢伙,我編輯了我的原問題,希望能讓它不那麼模糊...... – PDM