【发布时间】:2013-01-17 01:10:13
【问题描述】:
以这种方式监听 TTreeView 事件的 AdvancedCustomDraw 事件时:
if Stage = cdPrePaint then begin
// modify some Sender.Canvas properties and let it draw itself
end else if Stage = cdPostPaint then begin
// draw 'something extra' using a separate TControlCanvas
TControlCanvas.TextOut(SomeRect, 'Hello');
end;
...似乎当我启用 DoubleBuffered 时,控件决定不将“额外的东西”复制到屏幕外缓冲区。这意味着只要我不打扰有问题的窗户,一切都很好。当我这样做时,“额外的东西”仅在窗口的随机部分可见。
我在这里错过了什么?
【问题讨论】:
-
听起来简单的解决方案是将
DoubleBuffered切换为False。为什么你不能这样做? -
@DavidHeffernan 很好,这使得在调整相关控件的大小时可以看到擦除。这就是我想要阻止的。
-
这很容易做到。只需在大小调整循环中添加扩展窗口样式
WS_EX_COMPOSITED。就个人而言,我制作了无闪烁的 Delphi 应用程序,在调整大小时无闪烁,没有DoubleBuffered,我认为这是一个邪恶的属性。更多详细信息请参见我的回答:stackoverflow.com/questions/8058745/… -
它可以正常工作,使用通常的 CreateParams 覆盖!
标签: delphi delphi-7 doublebuffered