我正在使用Delphi XE3
当我创建一个新的VCL项目并在其上放置TToolbar
时,一切正常 - 除非我激活Form1.DoubleBuffered
。
从那一刻起,工具栏的绘制就被打破了 - 在设计时,它是黑色,透明或IDE的一部分(状态栏,工具栏等)被复制到其中。当我点击它们以及当我改为源代码(F12)并返回时,它会在这些选项之间发生变化
在运行时,它总是黑色。
使用DrawingStyle=dsGradient
,一切都按预期工作。切换回dsNormal
会再次打破它。
停用Form1.DoubleBuffered
修理它。
有关如何解决该问题的任何提示?
答案 0 :(得分:4)
正如本文When not to use DoubleBuffered
所述,某些控件(如TToolBar
和TRichEdit
)在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。从评论看来,你想要打击的闪烁似乎是在一个颜料盒中。我显然不知道细节,但我的经验和直觉说你应该能够很容易地处理当地的闪烁。肯定不需要全局形式的双重缓冲。