7

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

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

停用Form1.DoubleBuffered修复它。

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

4

2 回答 2

4

正如本文所报道的When not to use DoubleBuffered,某些控件喜欢设置为 true TToolBarTRichEdit但在DoubleBuffered属性设置为 true 时效果不佳。

原因可以在文档中找到TWinControl.DoubleBuffered,其中一些 WinControls 无法在临时位图上绘制自己(当DoubleBuffered为 true 时会发生这种情况)。

一种解决方法是TToolBarTPanel.

于 2013-03-25T10:06:28.963 回答
4

在我看来,解决方案是设置TForm.DoubleBufferedFalse. 使用值True会导致各种其他问题。在我看来,这个属性在 XP 主题之前运行得相当好,但自从它们出现以来,使用TForm.DoubleBuffered一直不可行。

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

如果您在没有双缓冲表单的情况下调整大小闪烁,请使用我对另一个问题的回答中的想法。从评论看来,您想要对抗的闪烁似乎在油漆盒中。我显然不知道细节,但我的经验和直觉告诉你,你应该能够很容易地处理局部级别的闪烁。肯定不需要全局形式的宽双缓冲。

于 2013-03-25T10:16:39.820 回答