IEl*_*ite 7 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笔记本电脑上尝试了相同的操作并获得了完全相同的结果
这是我的机器上的样子

这是在演示中看起来的样子

再来一次.当它放在表格上时,它不会像我在演示中看到的那样形状和高度.即使我添加标签.在我的Delphi 2010安装过程中,我做错了什么?
我终于在Win7 64上启用了Aero,在Delphi XE(Update 1)中重现了这个问题.似乎.DFM文件中的大小设置错误,并且因为Ribbon它不支持手动调整大小,所以无法在IDE中直观地修复它(尽管它在运行时正确显示)或在Object Inspector.它偶尔会在运行时正确显示,但似乎也是零星的.
这是一个讨厌的错误,因为它使得它无法设计Ribbon.您可以添加RibbonGroup项目,并分配ActionManager,并尝试使用它完全设计Structure Pane,但当然这不是一个实用的解决方案.
幸运的是,有一个非常简单的解决方法,虽然这很烦人.:)
我管理了两次以获得以下解决方法来运行,但是重新启动它无法多次工作,所以这是一种可能的解决方法(没有承诺 - 在XE中工作,在XE2 Update 2中始终失败):
Ribbon并添加至少一个选项卡.View as Text从上下文(弹出)菜单中进行选择.Ribbon在.dfm文本中查找控件,并 Height从26IDE指定的更改 200.(下一步将调整它,但这很好 - 200解决了当前的问题.)View as Form,并且Ribbon应该正确显示.(我在QC中针对XE2 Update 2报告了它,因为那里也存在问题 - QC#101642)
我TCustomRibbon.GetCaptionHeight特意跟踪了它
FCaptionHeight := Max(GetSystemMetrics(SM_CYCAPTION), 26);
Run Code Online (Sandbox Code Playgroud)
似乎GetSystemMetrics调用返回的东西少于26某些Win7配置(尽管我还不知道为什么).该方法中有几条注释行似乎改变了结果,但正如我所说,它们已经被注释掉了.
奇怪的是,在TCustomRibbon.Create,Height通过调用设置GetRibbonMetric(rmFullHeight),设置Result := cRibbonHeight + GetCaptionHeight;,并且 cRibbonHeight是一个常量定义为cRibbonHeight = 117;.
最后想想我已经跟踪了这一点.在声明中TRibbon,有一个published属性声明:
published
...
property Height default TCustomRibbon.cRibbonHeight;
Run Code Online (Sandbox Code Playgroud)
因为这是默认值,所以看起来任何其他值都意味着GetRibbonMetric上面提到的调用没有发生(参见TCustomRibbon.Create上面提到的),并且来自调用的奇怪结果GetSystemMetric导致错误值26被保存为'其他值`.奇怪的; 将更新AM中的QC.
附录:更新质量控制报告以及其他详细信息.
附录:QC报告开业于2012年5月,但似乎并没有被解析为XE5更新1(检查2014年1月).