关于在TPanel中画线的问题,为什么会这样呢?(20分)

  • 主题发起人 主题发起人 Archerfl
  • 开始时间 开始时间
A

Archerfl

Unregistered / Unconfirmed
GUEST, unregistred user!
新建一个工程,在窗体上放一Panel,然后在窗体的OnPaint中写下如下代码:
procedure TForm1.FormPaint(Sender: TObject);
var
C: TControlCanvas;
begin
C := TControlCanvas.Create;
try
C.Control := Panel1;
C.Pen.Width := 5;
C.Pen.Color := clRed;
C.PenPos := Point(5,20);
C.LineTo(100,20);
// self.Repaint;
finally
C.Free;
end;
end;
当程序运行时,在Panel中并没有出现想象中的一条红线,这个很正常,因为在窗体自画完成
后,Panel才开始自画,并且是首先清空自己的重画区域。
但是,当我把上面加注释的那句加上后,在程序运行后,就会出现红线,为什么呢?
 
self.Repaint重画form, 注意呀,只画form, 不包括所有子WinControl控件(Panel, Edit, StaticText等等),
其实加上这句后事件就形成了一个死循环了, (OnPaint中调用Repaint, Repaint中又调用OnPaint), 你看到的红线是上一次刷新Panel之后画上去的,本次刷新panel还没执行。
由于是死循环,加上代码简单,刷新速度快,所以你以为panel上画上了红线。
 
明白啦,感谢Pearl。散分!
 
后退
顶部