当前位置 : 主页 > 编程语言 > delphi >

delphi – 如何防止菜单和工具栏点击从浮动表单中窃取焦点?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我希望获得与Visual Studio 2010相同的效果,如果您将编辑器浮动在主窗体的顶部,单击主窗体菜单或工具栏按钮不会导致主窗体窃取焦点;相反,浮动窗口保持焦点. 如果没有这个,当聚焦控件处
我希望获得与Visual Studio 2010相同的效果,如果您将编辑器浮动在主窗体的顶部,单击主窗体菜单或工具栏按钮不会导致主窗体窃取焦点;相反,浮动窗口保持焦点.

如果没有这个,当聚焦控件处于浮动窗口时,就不可能调用在聚焦控件上操作的任何主菜单命令 – 因为你想要操作的控件在调用命令时失去焦点.

(具有讽刺意味的是,如果你仔细观察这个图像,你会看到编辑器中的选择是静音的,表明编辑器控件没有焦点.Visual Studio似乎做了一些略微狡猾的事情来实现浮动的错觉窗口仍然是焦点.)

如果您使用TActionMainMenuBar和TActionToolBar,解决方案非常简单.

首先是菜单栏:TActionMainMenuBar有一个属性AutoFocus,默认为True.将其设置为False,然后单击菜单将不会自动将焦点放在包含菜单的表单上.相反,以前有焦点的形式将保留它.

现在工具栏:TActionToolBar没有AutoFocus属性.相反,您需要处理其OnMouseActivate事件并返回maNoActivate.

请注意,从OnMouseActivate处理程序返回maNoActivate不适用于所有控件.无论OnMouseActivate处理程序的返回结果如何,某些控件(如TButton)在单击时都会自动获得焦点.但是在TActionToolBar的情况下,我们确实得到了我们所追求的效果.

我花了一段时间才发现这一点,甚至在Google上搜索包含“AutoFocus”和“OnMouseActivate”的页面也没有引出任何有用的结果(除了,可能是这个页面被索引后).所以我希望这个答案可以帮助别人.

网友评论