使用剪切板[4]: 如果把子控件一起复制? - 同时回复 ghd2004 的问题

如果连同子控件一起复制到剪切板, 需要定义一个新类型.

譬如在一个 TPanel 中包含一个 TEdit; 在复制 TPanel 时, 若要连同 TEdit 一起复制, 需要重新从 TPanel 中继承出一个类来(譬如是 TMyPanel), 把 TEdit 包含在新的类中.

运行效果图:

使用剪切板[4]: 如果把子控件一起复制? - 同时回复 ghd2004 的问题

TMyPanel 类的单元:

unit MyPanel;



interface



uses Classes, StdCtrls, ExtCtrls;



type

  TMyPanel = class(TPanel)

    Edit1: TEdit; 

    constructor Create(AOwner: TComponent); override;

  end;



implementation



{ TMyPanel }



constructor TMyPanel.Create(AOwner: TComponent);

begin

  inherited;

  Edit1 := TEdit.Create(Self);

  Edit1.Parent := Self;

  Edit1.Left := 10;

  Edit1.Top := 10;

  RegisterClasses([TMyPanel]); {在这里就给注册了}

end;



end.


 
   
测试单元:

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



uses Clipbrd, MyPanel;



var

  obj: TComponent;

  pnl: TMyPanel;



procedure TForm1.FormCreate(Sender: TObject);

begin

  pnl := TMyPanel.Create(Self);

  pnl.Parent := Self;

  pnl.Edit1.Text := '一起被复制';



  Button1.Caption := '复制';

  Button2.Caption := '粘贴';

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

  Clipboard.SetComponent(pnl);

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

  if Clipboard.HasFormat(CF_COMPONENT) then

  begin

    obj := Clipboard.GetComponent(Self, Self);

    TMypanel(obj).Left := 20;

    TMypanel(obj).Top := 60;

  end;

end;



end.


 
   

你可能感兴趣的:(问题)