我在为我的表单编写验证函数时遇到了一点麻烦。
我的表单中有一个分组框,在此分组框上有几个按钮,在此表单底部有一个状态栏。我编写了一个函数来在状态栏面板中显示验证消息。我有一个计时器,消息在状态栏中可见五秒钟,就像对用户的提示。
但我希望,如果在消息自行消失之前,用户碰巧单击表单中的任何对象(分组框、面板、按钮......任何地方),我可以使用表单 OnClick 清除验证消息。
我不想使用每个可能的控件进行交互,如果单击控件,则清除消息。我只想在窗体 OnClick 上执行此操作一次,但是,对象 OnClick 事件处理程序会覆盖父 (Form) OnClick 事件处理程序。
我不知道我是否足够清楚,但是有什么办法可以做到这一点吗?在表单中每次单击时只编写一次代码?
提前感谢您,对不起我的英语和任何拼写或语法错误。
向窗体中添加TApplicationEvents
组件。并为其OnMessage
事件实现一个处理程序,如下所示:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message=WM_LBUTTONDOWN then
ClearStatusBarMessage;
end;
其中ClearStatusBarMessage
是清除提示的代码。
每次应用程序在主 UI 线程上处理排队事件时,都会调用此事件处理程序。因此,这可能比您想象的更深远。我不确定您的应用程序是如何设计的,但您可能需要稍微调整代码以获得您想要的确切行为。
我最近不得不解决一个类似的问题。我处理了表单事件
OnMouseActivate
从帮助中复制和粘贴:
当用户用鼠标指针在控件上按下鼠标按钮并且父窗体未处于活动状态时发生。
我使用德尔福 2007