我在为表单编写验证函数时遇到了一些麻烦。
我的表单中有一个GroupBox,这个GroupBox上有几个按钮,这个表单底部有一个StatusBar。我编写了一个函数来在StatusBar面板中显示验证消息。我有一个Timer,消息在StatusBar中可见五秒钟,就像给用户提示一样。
但我希望如果在消息消失之前,用户碰巧点击Form中的任何对象(GroupBox,Panel,Button ...任何地方),我可以使用表单OnClick来清除验证消息
我不想处理每个可能的交互控件,如果单击控件则清除消息。我想在Form OnClick上只执行一次,但是,对象OnClick事件处理程序会覆盖父(Form)OnClick事件处理程序。
我不知道我是否足够清楚,但有什么方法可以做到这一点吗?在表单中的每次点击只编写一次代码?
提前感谢您,对不起我的英语以及任何拼写或语法错误。
答案 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