繁体   English   中英

TToolbar与TForm.DoubleBuffered不兼容?

[英]TToolbar incompatible with TForm.DoubleBuffered?

我正在使用Delphi XE3。
当我创建一个新的VCL项目并在其上放一个TToolbar时,一切正常 - 除非我激活Form1.DoubleBuffered
从那一刻起,工具栏的绘制就被打破了 - 在设计时,它是黑色,透明或IDE的一部分(状态栏,工具栏等)被复制到其中。 当我点击它时以及当我更改为源代码(F12)并返回时,它会在这些选项之间发生变化。
在运行时,它总是黑色的。

使用DrawingStyle=dsGradient ,一切都按预期工作。 切换回dsNormal再次打破它。

停用Form1.DoubleBuffered修复它。

任何提示如何解决该问题?

正如本文所述, When not to use DoubleBuffered ,某些控件(如TToolBarTRichEditDoubleBuffered属性设置为true时效果DoubleBuffered

原因可以在文档TWinControl.DoubleBuffered找到,其中一些WinControls无法在临时位图上绘制自己(就像DoubleBuffered为true时DoubleBuffered )。

一种解决方法是将TToolBar放在TPanel

在我看来,解决方案是将TForm.DoubleBuffered设置为False 使用值True会导致各种其他问题。 这个属性在XP主题之前运行得相当好,但是自从他们到来之后,在我看来,使用TForm.DoubleBuffered并不可行。

除了遇到的问题,我在使用Windows Basic主题时遇到了很多绘画漏洞。 我知道这不是主流,但我碰巧看到很多远程访问。 而且还有更多。 双重缓冲表单时,停止主题动画的工作。 例如,默认按钮会发出脉冲以指示它是默认按钮。

如果您在没有双重缓冲表单的情况下调整大小闪烁,请使用我对其他问题的回答中想法 从评论看来,你想要打击的闪烁似乎是在一个颜料盒中。 我显然不知道细节,但我的经验和直觉说你应该能够很容易地处理当地的闪烁。 肯定不需要全局形式的双重缓冲。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM