当我将TRibbon控件放置在不是应用程序MainForm的窗体上时,执行该操作后,该TRibbon的动作(即剪切,粘贴)将始终将焦点返回到MainForm。

即使持有TRibbon的TForm不是MainForm的子级,也会发生这种情况。

我正在使用Windows 7 64位Embarcadero RAD Studio XE版本15.0.3953.35171。

我使用TRibbon控件不正确,还是TRibbon有问题?

有帮助吗?

解决方案

这显然是设计使然。来自“ ribbonactnctrls.pas”的示例代码段: 通用标签

如您所见,没有检查任何条件可以帮助我们避免拨打电话。菜单项选择和按键处理程序中也有相同的代码。


我可能会修改注释焦点调用的源代码,并尝试查看是否有任何副作用。

作为一种替代方法,可以在焦点切换到主窗体后将焦点恢复到窗体。假设“ ActionList1”是TActionList,其中包含 not 主要形式的标准动作: 通用标签

但是,这将导致每次执行动作时主表单短暂闪烁。如果您不希望这样做,则可以更改设计,以便主窗体知道何时获得了不必要的焦点,并假装它没有得到焦点。

在unit1中: 通用标签

在unit2中: 通用标签


但是,如果您在项目源代码中未设置“ MainFormOnTaskBar”,这还远远不够,因为这样,主窗体不仅会获得焦点,而且会放在最前面。在这种情况下,两种形式都可以通过冻结其z顺序来响应不需要的焦点更改/激活。该代码将成为unit1的代码: 通用标签

,对于unit2: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top