Delphi如何在包含其他组件的表单上的任何位置检测单击事件

问题描述 投票:0回答:1

我在Delphi VCL表单应用程序中有一个TEdit(如果重要的话,包含在TFrame实例中)。用户指示完成编辑之后,通过单击表单上的其他位置,插入号和焦点将保留在此控件上,直到我单击另一个控件,然后再获得焦点。但是,无论用户单击何处,我都希望TEdit失去焦点。我希望可以使用ActiveControl := nil结束对所选控件的关注,但是我不确定在何处调用它。

我想让焦点离开所选控件,而不必将其转移到另一个控件。我可以将焦点放在窗体的OnClick事件上,但是如果用户在窗体上选择了其他控件(也包含在框架中),则该方法将不起作用,因为不会触发窗体的OnClick事件。为表单上的每个其他项目提供单独的OnClick事件似乎很繁琐。

实现此行为的全局解决方案是什么?

forms delphi onclick components frames
1个回答
0
投票

尝试使用TApplication(Events).OnMessage事件查找TApplication(Events).OnMessage消息。您可以使用VCL的WM_LBUTTONDOWNWM_LBUTTONDOWN功能(均以FindVCLWindow()单位)来查看点击坐标处是否有FindVCLWindow()。如果不存在控件,或者控件不可聚焦(其FindDragTarget()方法返回FindDragTarget()),则设置Vcl.Controls。否则,不执行任何操作,并在处理邮件时让单击的控件专注于自身。

© www.soinside.com 2019 - 2024. All rights reserved.