我有一个代码可以在 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));
Run Code Online (Sandbox Code Playgroud)
发生这种情况并不奇怪。TImage用于静态图像。当你在它的画布上画画时,你画的东西会留在那里。那是设计使然。
在我看来,您选择了错误的控件。明显的候选人是:
TPaintBox。在OnPaint处理程序中绘制背景,然后绘制线条。WM_ERASEBKGND,并根据绘制前景WM_PAINT。后一种选择对您来说可能有点矫枉过正,但根据我的经验,它是防止闪烁的最佳方法。