2

好的,在使用 TShape 之后,我需要从线条和文本中清除我的“Shape1”。

以及如何将“Shape1”中的所有内容复制到“Shape2”中?

谢谢B4^o^

    type
      TShape = class(ExtCtrls.TShape); //interposer class

      TForm1 = class(TForm)
        Shape1: TShape;
        Shape2: TShape;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
      public
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
//        Draw some text on Shape1 := TShape 
        Shape1.Canvas.Font.Name :='Arial';// set the font 
        Shape1.Canvas.Font.Size  :=20;//set the size of the font
        Shape1.Canvas.Font.Color:=clBlue;//set the color of the text
        Shape1.Canvas.TextOut(10,10,'1999');
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
//        Copy everything from Shape1 to Shape2 (make a duplication)
//        How to do it ? 
        showmessage('copy Shape1 into Shape2');    
    end;

    End.
4

1 回答 1

4

以下伪代码将SourceShape画布内容复制到TargetShape画布,但仅在TargetShape刷新之前:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TargetShape.Canvas.CopyRect(Rect(0, 0, TargetShape.ClientWidth,
    TargetShape.ClientHeight), SourceShape.Canvas, Rect(0, 0,
    SourceShape.ClientWidth, SourceShape.ClientHeight));
end;

清除之前复制的内容,您可以使用以下命令:

procedure TForm1.Button2Click(Sender: TObject);
begin
  TargetShape.Invalidate;
end;

为了使您的绘图保持持久性,您需要实现自己的事件,在该事件中,每当它触发时,使用如上所示OnPaint的方法将当前画布内容从源复制到目标。CopyRect

但问题是,为什么要使用TShape控件。最好自己使用TPaintBox和绘制你的东西,包括通过TShape控件绘制的形状。

于 2012-08-21T18:21:48.660 回答