假设我在面板上绘制了一个带有TPaintBox的绿色矩形(FillRect方法)。在这个矩形上我制作水平线(lineTo方法)。然后在那些线上我放了TShape(例如一个正方形)。现在,当我将TShape的可见性更改为先前TShape消失的行的错误部分时,留下了这样的效果:
我该如何做到这一部分并没有消失?
这是代码+我在编写代码时注意到一件奇怪的事情:如果我没有将showMessage方法放在代码中,那么行和tShape将不会显示。那是为什么?
var
Panel1 : TPanel;
PaintBox1 : TPaintBox;
procedure TForm1.Button1Click(Sender: TObject);
var t : TShape;
begin
Panel1 := TPanel.Create(form1);
Panel1.parent := form1;
Panel1.Color := clGreen;
Panel1.Width := 500;
Panel1.Height := 500;
Panel1.Top := 0;
Panel1.Left := 0;
PaintBox1 := TPaintBox.Create(form1);
PaintBox1.parent := Panel1;
PaintBox1.Width := 500;
PaintBox1.Height := 500;
PaintBox1.Top := 0;
PaintBox1.Left := 0;
//showMessage('eee');
PaintBox1.Canvas.Pen.Color := clWhite;
PaintBox1.Canvas.line(0,50,PaintBox1.Width,50);
t := TShape.Create(form1);
t.parent := Panel1;
t.Brush.Color := clRed;
t.Width := 50;
t.Height := 50;
t.Top := 25;
t.Left := 200;
t.Visible :=false;
end;
答案 0 :(得分:3)
你遇到的问题是因为你在程序的错误点上画画。绘制到绘图框控件必须在OnPaint
事件处理程序中进行。根据需要重新绘制油漆盒的内容。系统在需要触发OnPaint
事件时执行此操作。您需要将绘制代码移动到这样的事件处理程序中。
如果您希望绘制持久性画布,则可以考虑使用TImage
。