1.防止刷新时闪烁的终极解决办法
Perform($000B, 0, 0); //锁屏幕 防止闪烁
// 做一些会发生严重闪烁的事情..
//解锁屏幕并重画
Perform($000B, 1, 0);
RedrawWindow(Handle, nil, 0, RDW_FRAME + RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
2 Self.DoubleBuffered := True;
---------------------------------------------------------------
Self.DoubleBuffered := True;/ScrollBox.DoubleBuffered := True;
//Self or parent is Image's parent;
---------------------------------------------------------------
哈,我也遇到过类似问题。最后解决了:
1.确定你的Canvas控件的父控件,即如果你的Canvas控件是Image1,它在Panel1上,他的
父控件为Panel1,如果在Scrollbox1上,他的父控件为Scrollbox1;
2.设置 父控件.doublebuffered:=true;
3 Delphi中函数调用较比方便。
OldBmp, BufBmp是TbitMap
//画图法子:
procedure TChart.Draw(aCanvas: TCanvas);
begin
{把要画的操作放在这里}
end;
在你要画的地域用如次代码把内存中画好的意思放到你要显得的组件的canvas上,这里就是canvas:
Draw (BufBmp.Canvas);//Draw方法就是上面那段代码 bitblt(self.Canvas.Handle, 0, 0, ClientWidth, ClientHeight, self.BufBmp.Canvas.Handle, 0, 0, SRCCOPY);//拷贝函数 |
如果要用多个缓冲,用BufBmp.Assign(OldBmp);做内存中图片情节复制,然后在bufbmp中做进一步操作,再贴到显示区。