我在 64 位 Windows 计算机 (Win 7) 和 32 位 Windows 计算机 (XP) 上运行 Delphi 2010。
我正在尝试学习如何使用 TRibbon 控件。
我一直在遵循 Marco Cantu 2009 年手册中的示例并观看 YouTube 演示,但我的控件并不像书中或演示中所解释的那样工作。
我通过右键单击控件添加了两个选项卡。然而,当我将 TRibbon 放在主窗体上时,它看起来与我的屏幕截图中的一模一样。它没有书本或 YouTube 演示中的那么高。
我在运行 Windows Xp 和 Delphi 2010 的 Win 32 笔记本电脑上尝试了同样的操作,并得到了完全相同的结果
这是我的机器上的样子
这是演示中的样子
再一次。当它把它放在表单上时,它的形状和高度并不像我在演示中看到的那样。即使我添加标签。我在安装 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/