Mat*_*ias 20
尝试设置DoubleBuffered为true Form.OnCreate.
虽然使用双缓冲通常是最好的解决方案,但它并不总是正确的解决方案,绝对不是最节省内存的解决方案.但是如果你只绘制图像的一部分,我会与解决方案,以及设置进入DoubleBuffered到true如其他意见中提到.
但是,如果每次绘制时都填充整个组件区域,则可能需要选择其他方法.如果你设置ControlStyle为csOpaque你将避免让组件擦除背景,从而删除闪烁的源,而不必双缓冲.这当然要求您在整个组件区域上绘制,因此解决方案仅适用于您.
一般情况下,如果内存消耗不重要,我也会选择双缓冲,我只是想为您提供替代方案.:)
双缓冲的简单代码示例。
创建缓冲区(TBitmap)
在缓冲区画布上绘制。
在画布上绘制位图。Form1.Canvas例如。
Buffer := TBitmap.Create;
try
Buffer.Width:=Form1.Width;
Buffer.Height:=Form1.Height;
//clearBuffer
Buffer.Canvas.FillRect(Buffer.Canvas.ClipRect);
//draw Something
Buffer.Canvas.TextOut(0,0,'Hello World');
Buffer.Canvas.Rectangle(0,1,2,3);
//drawBuffer on canvas
Form1.Canvas.Draw(0,0,Buffer);
finally
Buffer.free
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11763 次 |
| 最近记录: |