delphi - TRibbon 不显示选项卡

标签 delphi delphi-2010 windows-ribbon-framework

我在 64 位 Windows 计算机 (Win 7) 和 32 位 Windows 计算机 (XP) 上运行 Delphi 2010。

我正在尝试学习如何使用 TRibbon 控件。

我一直在遵循 Marco Cantu 2009 年手册中的示例并观看 YouTube 演示,但我的控件并不像书中或演示中所解释的那样工作。

我通过右键单击控件添加了两个选项卡。然而,当我将 TRibbon 放在主窗体上时,它看起来与我的屏幕截图中的一模一样。它没有书本或 YouTube 演示中的那么高。

我在运行 Windows Xp 和 Delphi 2010 的 Win 32 笔记本电脑上尝试了同样的操作,并得到了完全相同的结果

这是我的机器上的样子

64 bit laptop screenshot

这是演示中的样子

from youtube video demo

再一次。当它把它放在表单上时,它的形状和高度并不像我在演示中看到的那样。即使我添加标签。我在安装 Delphi 2010 的过程中是否做错了什么?

最佳答案

我终于在启用了 Aero 的 Win7 64 上的 Delphi XE(更新 1)中重现了该问题。 .DFM 文件中的大小似乎设置错误,因为 Ribbon不支持手动调整大小,您无法在 IDE (尽管它在运行时正确显示)Object Inspector 中直观地修复它。它偶尔会在运行时正确显示,但似乎也是零星的。

这是一个令人讨厌的错误,因为它使得设计Ribbon变得不可能。 。您可以添加RibbonGroup项,并分配 ActionManager ,并尝试完全使用 Structure Pane 来设计它,但这当然不是一个实用的解决方案。

幸运的是,有一个非常简单的解决方法,尽管不得不这样做很烦人。 :)

我两次设法让以下解决方法发挥作用,但重新开始几次都失败了,因此这是一种可能的解决方法(没有 promise - 在 XE 中有效,在 XE2 更新 2 中始终失败):

  • 右键单击 Ribbon并添加至少一个选项卡。
  • 右键单击 IDE 中的表单,然后选择 View as Text从上下文(弹出)菜单。
  • 查找Ribbon控制在.dfm文本,然后更改 Height来自26 IDE 分配给 200 。 (下一步将对其进行调整,但这很好 - 200 解决了眼前的问题。)
  • 再次右键单击,然后选择 View as Form ,以及 Ribbon应正确显示。

(我在 XE2 Update 2 的 QC 中报告了该问题,因为该问题也存在 - QC #101642 )

我追踪到TCustomRibbon.GetCaptionHeight ,具体来说

FCaptionHeight := Max(GetSystemMetrics(SM_CYCAPTION), 26);

看起来像GetSystemMetrics调用返回的值小于 26在某些 Win7 配置上(虽然我还不知道为什么)。该方法中有几行注释行似乎会改变结果,但正如我所说,它们已被注释掉。

奇怪的部分是在 TCustomRibbon.Create 中,Height通过调用 GetRibbonMetric(rmFullHeight) 设置,它设置 Result := cRibbonHeight + GetCaptionHeight; ,和cRibbonHeight是一个常数,定义为 cRibbonHeight = 117; .

我终于找到了这个。在TRibbon的声明中,有一个published属性声明:

published
   ...
  property Height default TCustomRibbon.cRibbonHeight;

因为这是默认值,所以任何其他值似乎都意味着调用 GetRibbonMetric上面提到的情况不会发生(参见上面提到的 TCustomRibbon.Create ),并且调用 GetSystemMetric 会产生奇怪的结果导致错误值26保存为“其他值”。奇怪;将在 AM 中更新 QC。

附录:更新了质量控制报告并提供了更多详细信息。

附录:QC 报告 opened 2012 年 5 月,但截至 XE5 更新 1 似乎尚未解决(2014 年 1 月检查)。

关于delphi - TRibbon 不显示选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421205/

相关文章:

delphi - 记录中的动态数组引用计数

ios - Delphi XE2/FireMonkey 电子邮件创建

c++ - Ribbon UI动态按钮菜单编辑

windows - 截取使用 createdesktop api 创建的桌面的屏幕截图

delphi - 如何修复Delphi XE2错误: Package can't be installed because it was created with a different version of Delphi or CBuilder?

delphi - 将文件拖放到 Delphi 表单中不起作用

delphi - 不区分大小写的 Bob Jenkins 哈希?

delphi - 在自定义组件中重写 TScrollBox OnResize 事件

delphi - Windows 功能区框架 : How to change font face and size?

windows-ribbon-framework - 如何使 Windows Ribbon Framework 尊重用户的字体大小?