3

TActionMainMenuBar 中存在一个关键且易于重现的错误,该错误仅在启用 VCL 样式时发生,我想知道是否有人已经看到它并找到任何解决方法。我正在使用最新的 Delphi 10.3.3 Rio(也发生在 10.4.1 Sydney),而不是使用高 DPI 显示器。

重新创建它的步骤:

  • 创建一个新的 Delphi VCL 应用程序。通过项目选项启用 VCL 样式。为其分配任何内置样式。
  • 向其中添加 3 个组件:TActionManager、TActionMainMenuBar 和一个 TCustomizeDlg。通过 ActionManager 属性链接 TActionMainMenuBar 和 TActionManager。还将 TCustomizeDlg 链接到 ActionManager。
  • 现在,向 ActionManager 组件添加一些操作。在我的示例中,我添加了 4 个 DataSet 标准操作 + 3 个 Dialog 标准操作。
  • 将新创建的操作拖放到 ActionMainMenuBar,因此现在有 2 个顶部菜单项,第一个具有 4 个操作,第二个具有 3 个操作。看图片

在此处输入图像描述

  • 现在将此代码添加到一些用户触发的事件中(我使用了 ActionMainMenuBar DblClick 事件):
   procedure TForm9.ActionMainMenuBar1DblClick(Sender: TObject);
   begin
     CustomizeDlg1.Show;
   end;
  • 运行应用程序并双击 ActionMainMenuBar。显示 CustomizeDlg 并且操作主菜单栏进入设计模式,允许您对其进行自定义。
  • 从对话框中拖动一个动作并将鼠标移动到第二个顶部菜单项上(它将下拉并且所有 3 个项都将可见)。见下图:

在此处输入图像描述

  • 现在将鼠标移动到另一个顶部菜单操作(该示例中的 DataSet)并将其移回 Dialog 菜单项。现在菜单的绘制完全被打破了:

在此处输入图像描述

从现在开始,菜单的绘制将中断,直到您关闭 CustomizeDlg。

到目前为止我所知道的:

  • 如果未启用 VCL 样式,则不会发生此问题。
  • 该错误与 CustomizeDlg 无关,而是与进入 DesignMode 时的 ActionMainMenuBar 相关(祖先 TCustomActionBar 有一个名为 DesignMode 的属性)。
  • 它至少发生在 Delphi 10.3.3 Rio 和 10.4.1 Sydney。可能是其他人

不幸的是,调试这种场景非常耗时,有时无法直接调试(调试本身会在处理鼠标消息时改变场景等)

是否有任何已知的修复、补丁或解决方法(除了禁用不是选项的 VCL 样式)?

4

0 回答 0