2

OK、TShapeを使用した後、LinesandTextから「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 に答える