Form OnClick事件处理程序 - 如何重叠其他事件处理程序?

时间:2013-10-25 12:27:00

标签: delphi

我在为表单编写验证函数时遇到了一些麻烦。

我的表单中有一个GroupBox,这个GroupBox上有几个按钮,这个表单底部有一个StatusBar。我编写了一个函数来在StatusBar面板中显示验证消息。我有一个Timer,消息在StatusBar中可见五秒钟,就像给用户提示一样。

但我希望如果在消息消失之前,用户碰巧点击Form中的任何对象(GroupBox,Panel,Button ...任何地方),我可以使用表单OnClick来清除验证消息

我不想处理每个可能的交互控件,如果单击控件则清除消息。我想在Form OnClick上只执行一次,但是,对象OnClick事件处理程序会覆盖父(Form)OnClick事件处理程序。

我不知道我是否足够清楚,但有什么方法可以做到这一点吗?在表单中的每次点击只编写一次代码?

提前感谢您,对不起我的英语以及任何拼写或语法错误。

2 个答案:

答案 0 :(得分:4)

在表单中添加TApplicationEvents组件。并为其OnMessage事件实现一个处理程序,如下所示:

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

其中ClearStatusBarMessage是您清除提示的代码。

每次应用程序处理主UI线程上的排队事件时,都会调用此事件处理程序。所以,这可能比你想象的更具深远意义。我不确定您的应用程序是如何设计的,但您可能需要稍微调整一下代码以获得您想要的确切行为。

答案 1 :(得分:0)

我最近不得不解决类似的问题..我处理了表单事件

OnMouseActivate

从帮助中复制和粘贴:

  

当用户在控件上按下鼠标指针并且父窗体未激活时发生。

我使用Delphi 2007