[英]TToolbar incompatible with TForm.DoubleBuffered?
我正在使用Delphi XE3。
当我创建一个新的VCL项目并在其上放一个TToolbar
时,一切正常 - 除非我激活Form1.DoubleBuffered
。
从那一刻起,工具栏的绘制就被打破了 - 在设计时,它是黑色,透明或IDE的一部分(状态栏,工具栏等)被复制到其中。 当我点击它时以及当我更改为源代码(F12)并返回时,它会在这些选项之间发生变化。
在运行时,它总是黑色的。
使用DrawingStyle=dsGradient
,一切都按预期工作。 切换回dsNormal
再次打破它。
停用Form1.DoubleBuffered
修复它。
任何提示如何解决该问题?
正如本文所述, When not to use DoubleBuffered
,某些控件(如TToolBar
和TRichEdit
在DoubleBuffered
属性设置为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.