2013-10-25 214 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