Delphi TToolbar与TForm.DoubleBuffered不兼容?

Delphi TToolbar与TForm.DoubleBuffered不兼容?,delphi,toolbar,vcl,delphi-xe3,doublebuffered,Delphi,Toolbar,Vcl,Delphi Xe3,Doublebuffered,我正在使用Delphi XE3。 当我创建一个新的VCL项目并在其上放置一个TToolbar时,一切正常-除了激活Form1.DoubleBuffered 从那一刻起,工具栏的图形就被破坏了——在designtime中,它要么是黑色的、透明的,要么IDE的一部分(状态栏、工具栏等)被复制到其中。当我点击它时,以及当我切换到源代码(F12)并返回时,它在这些选项之间变化。 在运行时,它总是黑色的 使用DrawingStyle=dsGradient,一切都按预期进行。切换回dsNormal会再次中断

我正在使用Delphi XE3。
当我创建一个新的VCL项目并在其上放置一个
TToolbar
时,一切正常-除了激活
Form1.DoubleBuffered

从那一刻起,工具栏的图形就被破坏了——在designtime中,它要么是黑色的、透明的,要么IDE的一部分(状态栏、工具栏等)被复制到其中。当我点击它时,以及当我切换到源代码(F12)并返回时,它在这些选项之间变化。
在运行时,它总是黑色的

使用
DrawingStyle=dsGradient
,一切都按预期进行。切换回
dsNormal
会再次中断

停用
Form1。双缓冲
会修复它


如何解决这个问题有什么提示吗?

正如本文所述,一些控件,如
TToolBar
TRichEdit
双缓冲
属性设置为true时无法正常工作

原因可以在文档中找到,其中一些WinControl无法在临时位图上绘制自己(当
双缓冲
为真时发生的情况)


一种解决方法是将
t工具栏
放在
t面板
上。我认为解决方法是将
t格式双缓冲
设置为
False
。使用值
True
会导致各种其他问题。这个属性在XP主题出现之前运行得相当好,但在我看来,自从它们出现之后,使用
TForm.DoubleBuffered
就不可行了

除了您遇到的问题之外,在使用Windows基本主题时,我还遇到了许多绘画缺陷。我知道这不是主流,但我碰巧在远程访问中看到了很多。还有更多。当对窗体进行双重缓冲时,将停止主题动画的工作。例如,一个默认按钮脉冲指示它是默认按钮


如果在不双重缓冲窗体的情况下,调整大小闪烁,请使用。从评论来看,你想要对抗的闪烁似乎是在一个油漆盒里。很明显,我不知道细节,但我的经验和直觉告诉我,你应该能够很容易地在地方一级处理这种忽隐忽现的情况。当然不需要全局表单范围的双缓冲。

请参阅。这里的解决方法是将
t工具栏
放在
t面板
上。谢谢你,路路路-工作得很好。如果您将此作为答案发布,我会将其标记为已解决。或者您也可以在
cdPrePaint
绘图阶段的
OnAdvancedCustomDraw
事件中填充工具栏的客户端矩形(尽管相当多)。谢谢您的链接,David。我不需要使用
DoubleBuffered
来清除VCL组件,但对于正在绘制图表的
TPaintBox
(具有缩放和拖动等用户交互)。我知道我可以使用
TBitmap
(或
TImage
),但只要
表单。双缓冲
有效(并且不会出现其他问题),我更喜欢单击解决方案。双缓冲在许多控件中都会产生很多问题,不仅仅是使用TToolbar。但是如果你禁用它,你的程序的某些区域会有很多闪烁。。。所以选择你的毒药。谢谢你的提示。正如我在你对我的问题的评论中所说的,我现在将使用
TPanel
解决方案——但我会记住你的评论,并肯定会研究你提到的问题;也许我会照你说的做。再次感谢。消除油漆盒的闪烁非常容易。双重缓冲的形式是严重超过顶部。它影响了很多其他方面。这是局部问题的全球性解决方案。应该避免。是的,我不能否定你说的话。我不知道
t格式。双缓冲
会导致那么多问题;我想我会去所有我用过的地方停用它。所以再次感谢你;)