2
當聽TTreeView事件的AdvancedCustomDraw事件是這樣的:閃爍當上了雙緩衝TTreeView自定義繪製
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好,這使得在調整相關控件的大小時可以清除擦除。這就是我想要阻止的。 – Orwell
這很容易做到。只需在調整循環中添加擴展窗口樣式'WS_EX_COMPOSITED'。我個人做了閃爍免費的德爾福應用程序,在調整大小時免費閃爍,沒有'DoubleBuffered',我認爲這是一個屬性。更多細節在我的答案在這裏:http://stackoverflow.com/questions/8058745/tlabel-and-tgroupbox-captions-flicker-on-resize –