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

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

概述我希望获得与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”的页面也没有引出任何有用的结果(除了,可能是这个页面被索引后).所以我希望这个答案可以帮助别人.

总结

以上是内存溢出为你收集整理的delphi – 如何防止菜单和工具栏点击从浮动表单中窃取焦点?全部内容,希望文章能够帮你解决delphi – 如何防止菜单和工具栏点击从浮动表单中窃取焦点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1246043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存