画布线消失了

时间:2014-05-27 14:28:58

标签: lazarus

假设我在面板上绘制了一个带有TPaintBox的绿色矩形(FillRect方法)。在这个矩形上我制作水平线(lineTo方法)。然后在那些线上我放了TShape(例如一个正方形)。现在,当我将TShape的可见性更改为先前TShape消失的行的错误部分时,留下了这样的效果:

enter image description here

我该如何做到这一部分并没有消失?

这是代码+我在编写代码时注意到一件奇怪的事情:如果我没有将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;

1 个答案:

答案 0 :(得分:3)

你遇到的问题是因为你在程序的错误点上画画。绘制到绘图框控件必须在OnPaint事件处理程序中进行。根据需要重新绘制油漆盒的内容。系统在需要触发OnPaint事件时执行此操作。您需要将绘制代码移动到这样的事件处理程序中。

如果您希望绘制持久性画布,则可以考虑使用TImage