为什么Delphi 2010的TRibbon控件在Windows XP上会出现"闪烁",但在Vista/7上不会?

5

alt text

我注意到当我使用Delphi 2010自带的TRibbon控件时,在我的Windows 7系统上它能完美运行。然而,在一个使用“经典主题”的Windows XP系统上,应用程序会出现一些奇怪的绘制问题(我还没有尝试过playschool主题)。
我知道有其他来自DevExpress和TMS Software的Ribbon组件可用,但购买第三方控件对于这个项目不是一个选择。
有人遇到过这个问题或者知道解决方法吗?

2
我在“playchool”主题中也遇到了同样的问题。 - Nat
2个回答

4
很可能是因为Windows 7使用了“桌面合成”(Desktop Compositing),这意味着组件会被绘制到一个离屏位图上,然后再复制到显示器上。在XP中,组件通常直接绘制到显示器上(如果组件首先擦除已有内容并在“干净的画布”上重新绘制,则可能会导致闪烁)。
Delphi支持双缓冲,可以实现相同的效果。如果将功能区的DoubleBuffered属性设置为True(在代码中,因为它没有发布),那么应该可以避免闪烁(以分配和移动额外的内存为代价进行绘制)--不过,我应该说,我实际上还没有尝试过在TRibbon中使用它。
请注意,在运行时设置DoubleBuffered为True时,如果在支持桌面合成的Windows版本上运行,就不会有额外的开销。VCL的代码会跳过离屏位图的操作。

好的回答,特别感谢关于双缓冲没有开销的说明。 - MarkF

0

很可能这是 TRibbon 代码中的一个错误,Microsoft ribbon 在 XP 和 Win7 中都显示完美。

如果您更改了 XP 主题,图片中显示的最小化按钮是否会随着主题更改而改变? 如果是这种情况,则 Ribbon 代码可能已经被优化为适用于 Vista 和 7,而没有被开发成在 XP 下运行完美。

除非您可以修改 TRibbon 代码,否则无法真正解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接