2013-10-25 213 views
1

我在寫入驗證函數時遇到了一些麻煩。Form OnClick事件處理程序 - 如何重疊其他事件處理程序?

我在我的窗體中有一個GroupBox,在這個GroupBox上有一對按鈕,在這個窗體的底部有一個StatusBar。我寫了一個函數在StatusBar面板中顯示驗證消息。我有一個計時器,消息在StatusBar中顯示五秒鐘,就像給用戶一個提示。

但我希望如果在消息自身消失之前用戶恰好點擊窗體(GroupBox,Panel,Button ...任何地方)內的任何對象,我可以使用窗體OnClick來清除驗證信息。

我不想與可能進行交互的每個控件一起工作,如果控件被點擊則清除消息。我想在Form OnClick中只做一次,但是,對象OnClick事件處理程序會覆蓋父窗體O​​nClick事件處理程序。

我不知道我是否足夠清楚,但有什麼辦法可以做到這一點?在表單中每次點擊都只寫一次代碼?

非常感謝您,對於我的英文和任何拼寫錯誤或語法錯誤感到抱歉。

回答

4

將一個TApplicationEvents組件添加到您的表單中。並實現了一個處理程序,其OnMessage事件是這樣的:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; 
    var Handled: Boolean); 
begin 
    if Msg.message=WM_LBUTTONDOWN then 
    ClearStatusBarMessage; 
end; 

其中ClearStatusBarMessage是你的代碼以清除提示。

每次應用程序在主UI線程上處理排隊的事件時,都會調用此事件處理程序。所以,這可能比你想像的更深遠。我不確定你的應用程序是如何設計的,但你可能需要稍微調整一下代碼才能得到你想要的確切行爲。

+0

是否'Handled'默認爲假呢? –

+0

@MarcusAdams確實如此。如果沒有,這將是非常煩人的。 –

+0

@DavidHeffernan它工作完美。感謝您抽出一點時間來幫助我。對此,我真的非常感激。 – artie

0

我最近不得不解決類似的問題。我處理的形式事件

OnMouseActivate 

複製&從幫助粘貼:

當用戶按下鼠標按鍵與鼠標時發生指針在控件上並且父窗體不活動。

我使用Delphi 2007