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