我终于在启用了 Aero 的 Win7 64 上的 Delphi XE(更新 1)中重现了该问题。似乎 .DFM 文件中的大小设置错误,并且因为Ribbon
不支持手动调整大小,您无法在 IDE 中直观地修复它(尽管它在运行时正确显示) 或在Object Inspector
。它偶尔会在运行时正确显示,但似乎也是零星的。
这是一个令人讨厌的错误,因为它使得设计Ribbon
。你可以加RibbonGroup
项,并分配ActionManager
,并尝试完全使用Structure Pane
,但这当然不是一个实际的解决方案。
幸运的是,有一个非常简单的解决方法,尽管必须这样做很烦人。 :)罢工>
我两次设法让以下解决方法发挥作用,但重新开始它多次失败,因此这是一种可能的解决方法(没有承诺 - 在 XE 中有效,在 XE2 Update 2 中始终失败):
- 右键单击
Ribbon
并添加至少一个选项卡。
- 右键单击 IDE 中的表单,然后选择
View as Text
从上下文(弹出)菜单。
- 找出
Ribbon
控制在.dfm
文本,并更改Height
来自26
IDE 分配给200
。 (下一步会调整它,但没关系 -200
解决了眼前的问题。)
- 再次右键单击,然后选择
View as Form
,以及Ribbon
应正确显示。
(我在 QC 中针对 XE2 Update 2 报告了该问题,因为该问题也存在 -质量控制#101642 http://qc.embarcadero.com/wc/qcmain.aspx?d=101642)
我追踪到TCustomRibbon.GetCaptionHeight
, 具体来说
FCaptionHeight := Max(GetSystemMetrics(SM_CYCAPTION), 26);
似乎是GetSystemMetrics
调用返回的值小于26
在某些 Win7 配置上(虽然我还不知道为什么)。该方法中有几行注释似乎会改变结果,但正如我所说,它们已被注释掉。
奇怪的部分是在TCustomRibbon.Create
, the Height
通过调用来设置GetRibbonMetric(rmFullHeight)
,这设置了Result := cRibbonHeight + GetCaptionHeight;
, and cRibbonHeight
是一个常数,定义为cRibbonHeight = 117;
.
最后我想我已经找到了这个。在声明中TRibbon
, 有一个published
财产申报:
published
...
property Height default TCustomRibbon.cRibbonHeight;
因为这是默认值,所以任何其他值似乎都意味着调用GetRibbonMetric
上面提到的情况不会发生(参见TCustomRibbon.Create
上面提到的),以及调用的奇怪结果GetSystemMetric
导致错误值26
保存为“其他值”。奇怪;将在上午更新 QC。
附录:更新了 QC 报告并提供了更多详细信息。
附录:质量控制报告opened http://qc.embarcadero.com/wc/qcmain.aspx?d=1016422012 年 5 月,但截至 XE5 Update 1 似乎尚未解决(2014 年 1 月检查)。