我在Delphi VCL表单应用程序中有一个TEdit
(如果重要的话,包含在TFrame
实例中)。用户指示完成编辑之后,通过单击表单上的其他位置,插入号和焦点将保留在此控件上,直到我单击另一个控件,然后再获得焦点。但是,无论用户单击何处,我都希望TEdit
失去焦点。我希望可以使用ActiveControl := nil
结束对所选控件的关注,但是我不确定在何处调用它。
我想让焦点离开所选控件,而不必将其转移到另一个控件。我可以将焦点放在窗体的OnClick
事件上,但是如果用户在窗体上选择了其他控件(也包含在框架中),则该方法将不起作用,因为不会触发窗体的OnClick
事件。为表单上的每个其他项目提供单独的OnClick
事件似乎很繁琐。
实现此行为的全局解决方案是什么?
尝试使用TApplication(Events).OnMessage
事件查找TApplication(Events).OnMessage
消息。您可以使用VCL的WM_LBUTTONDOWN
或WM_LBUTTONDOWN
功能(均以FindVCLWindow()
单位)来查看点击坐标处是否有FindVCLWindow()
。如果不存在控件,或者控件不可聚焦(其FindDragTarget()
方法返回FindDragTarget()
),则设置Vcl.Controls
。否则,不执行任何操作,并在处理邮件时让单击的控件专注于自身。