我有一个代码在timage上绘制一条移动线,我希望以前的旧线总是消失,但是这段代码使得所有线都出现在那里......当我启用DoubleBuffering来形成时,下面的代码工作正常但位于myimg中的背景位图根本不显示。
Fbitmap.Canvas.Pen.Color:=clRed;
Fbitmap.Canvas.Pen.Width:=2;
Fbitmap.Canvas.MoveTo(Xo,Yo);
Fbitmap.Canvas.LineTo(Xs,Ys);
myimg.Canvas.CopyRect(Rect(0, 0, Width, Height), FBitmap.Canvas, Rect(0, 0, Width, Height));
答案 0 :(得分:3)
这种情况发生并不奇怪。 TImage
适用于静态图像。当你在画布上画画时,你画的东西就在那里。那是设计上的。
在我看来,你选择了错误的控制。明显的候选人是:
TPaintBox
。在OnPaint
处理程序中绘制背景,然后绘制线条。 WM_ERASEBKGND
,以及前景以响应WM_PAINT
。 后一种选择可能对你来说太过分了,但根据我的经验,这是防止闪烁的最好方法。
答案 1 :(得分:1)
有几种方法可以实现这一目标。最简单的方法是保持图像不变,并添加另一个组件(TShape),您将移动图像。
如果必须在图像上写入线条,则需要在存储器中记录原始图像,并在绘制新图像之前将CopyRect与线条一起使用。此方法的更快变化是仅在内存中保留将绘制线条的图像部分,因此您可以稍后将其复制到线上,从而将其删除。