【问题标题】:How do I prevent menu and toolbar clicks stealing focus from a floating form?如何防止菜单和工具栏点击从浮动表单中窃取焦点?
【发布时间】:2014-03-21 11:51:38
【问题描述】:

我想实现与 Visual Studio 2010+ 中相同的效果,如果您将编辑器浮动在主窗体顶部,单击主窗体菜单或工具栏按钮不会导致窃取焦点的主要形式;而是浮动窗口保持焦点。

如果没有这个,当焦点控件位于浮动窗口中时,就无法调用对焦点控件进行操作的任何主菜单命令 - 因为您要操作的控件在调用命令时失去焦点。

(具有讽刺意味的是,如果您仔细查看此图像,您会发现编辑器中的选择被静音,这表明编辑器控件没有具有焦点。Visual Studio 似乎正在做一些稍微歪曲的东西来实现浮动窗口仍然集中的错觉。)

【问题讨论】:

    标签: delphi focus toolbar menubar


    【解决方案1】:

    如果您使用TActionMainMenuBarTActionToolBar,解决方案非常简单。

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

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

    请注意,从 OnMouseActivate 处理程序返回 maNoActivate 并不适用于所有控件。无论 OnMouseActivate 处理程序的返回结果如何,某些控件(例如 TButton)都会在单击时为自己提供焦点。但在 TAc​​tionToolBar 的情况下,我们确实得到了我们想要的效果。

    我花了一段时间才找到这个,即使在 Google 上搜索包含“AutoFocus”和“OnMouseActivate”的页面也没有得到任何有用的结果(可能是这个页面一旦被编入索引)。所以我希望这个答案对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多