TRibbon没有显示标签

时间:2011-12-07 19:22:48

标签: 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安装过程中,我做错了什么?

1 个答案:

答案 0 :(得分:8)

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

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

幸运的是,有一个非常简单的解决方法,虽然这很烦人。 :)

我管理了两次以获得以下解决方法来运行,但是重新启动它无法多次工作,所以这是一种可能的解决方法(没有承诺 - 在XE中工作,在XE2 Update 2中始终失败):

  • 右键点击Ribbon并添加至少一个标签。
  • 右键单击IDE中的表单,然后从上下文(弹出窗口)菜单中选择View as Text
  • Ribbon文本中找到.dfm控件,并将Height从IDE分配给26的{​​{1}}更改为200。 (下一步将调整它,但没关系 - 200解决了眼前的问题。)
  • 再次右键点击,然后选择View as FormRibbon应正确显示。

(我在QC中针对XE2 Update 2进行了报告,因为那里也存在问题 - QC #101642

我将其追溯到TCustomRibbon.GetCaptionHeight,特别是

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

似乎GetSystemMetrics调用在某些Win7配置上返回的内容小于26(尽管我还不知道为什么)。该方法中有几条注释行似乎改变了结果,但正如我所说,它们已经被注释掉了。

奇怪的是,在TCustomRibbon.Create中,Height是通过调用GetRibbonMetric(rmFullHeight)设置的,Result := cRibbonHeight + GetCaptionHeight;设置cRibbonHeight,而cRibbonHeight = 117;是常量定义为TRibbon

最后想想我已经追踪到了这一点。在published的声明中,有一个published ... property Height default TCustomRibbon.cRibbonHeight; 属性声明:

GetRibbonMetric

因为这是默认设置,所以看起来任何其他值都意味着没有发生上述TCustomRibbon.Create的调用(请参阅上面提到的GetSystemMetric),以及来电的奇怪结果到26会导致错误值{{1}}保存为“其他值”。奇怪的;将更新AM中的质量控制。

附录:更新质量控制报告及其他详细信息。

附录:2012年5月质量控制报告opened,但从XE5 Update 1(2014年1月检查)开始,似乎没有得到解决。