delphi – 如何防止菜单和工具栏点击从浮动表单中窃取焦点?
我希望获得与Visual Studio 2010相同的效果,如果您将编辑器浮动在主窗体的顶部,单击主窗体菜单或工具栏按钮不会导致主窗体窃取焦点;相反,浮动窗口保持焦点.
如果没有这个,当聚焦控件处于浮动窗口时,就不可能调用在聚焦控件上操作的任何主菜单命令 – 因为你想要操作的控件在调用命令时失去焦点. (具有讽刺意味的是,如果你仔细观察这个图像,你会看到编辑器中的选择是静音的,表明编辑器控件没有焦点.Visual Studio似乎做了一些略微狡猾的事情来实现浮动的错觉窗口仍然是焦点.) 解决方法
如果您使用TActionMainMenuBar和TActionToolBar,解决方案非常简单.
首先是菜单栏:TActionMainMenuBar有一个属性AutoFocus,默认为True.将其设置为False,然后单击菜单将不会自动将焦点放在包含菜单的表单上.相反,以前有焦点的形式将保留它. 现在工具栏:TActionToolBar没有AutoFocus属性.相反,您需要处理其OnMouseActivate事件并返回maNoActivate. 请注意,从OnMouseActivate处理程序返回maNoActivate不适用于所有控件.无论OnMouseActivate处理程序的返回结果如何,某些控件(如TButton)在单击时都会自动获得焦点.但是在TActionToolBar的情况下,我们确实得到了我们所追求的效果. 我花了一段时间才发现这一点,甚至在Google上搜索包含“AutoFocus”和“OnMouseActivate”的页面也没有引出任何有用的结果(除了,可能是这个页面被索引后).所以我希望这个答案可以帮助别人. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |