TToolbar与TForm.DoubleBuffered不兼容?

时间:2013-03-25 09:44:46

标签: delphi toolbar vcl delphi-xe3 doublebuffered

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

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

停用Form1.DoubleBuffered修理它。

有关如何解决该问题的任何提示?

2 个答案:

答案 0 :(得分:4)

正如本文When not to use DoubleBuffered所述,某些控件(如TToolBarTRichEdit)在DoubleBuffered属性设置为true时效果不佳。

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

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

答案 1 :(得分:4)

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

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

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