7

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

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

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

我通过右键单击控件添加了两个选项卡。但是,当我将 TRibbon 放在主窗体上时,它看起来与我的屏幕截图中的完全一样。它不如书本或 youtube 演示中的高。

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

这是我机器上的样子

64位笔记本电脑截图

这是演示中的样子

来自 youtube 视频演示

再来一次。当它把它放在表单上时,它不会像我在演示中看到的那样具有形状和高度。即使我添加标签。我在安装 Delphi 2010 期间做错了吗?

4

1 回答 1

8

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

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

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

我设法两次使以下解决方法起作用,但是重新开始它几次都失败了,所以这是一种可能的解决方法(没有承诺 - 在 XE 中工作,在 XE2 更新 2 中始终失败):

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

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

我追踪到它TCustomRibbon.GetCaptionHeight,特别是

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

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

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

最后认为我已经追踪到了这个。在 的声明中TRibbon,有一个published属性声明:

published
   ...
  property Height default TCustomRibbon.cRibbonHeight;

因为这是默认值,所以看起来任何其他值都意味着GetRibbonMetric不会发生上面提到的调用(参见TCustomRibbon.Create上面提到的),调用的奇怪结果GetSystemMetric导致错误值26被保存为“其他值” `。奇怪的;将在上午更新 QC。

附录:更新了 QC 报告并提供了更多详细信息。

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

于 2011-12-08T01:35:48.823 回答