Delphi中剪切板的使用[4]:如果把子控件一起复制2012-12-14 博客园 万一如果连同子控件一起复制到剪切板, 需要定义一个新类型.譬如在一个 TPanel 中包含一个 TEdit; 在复制 TPanel 时, 若要连同 TEdit 一起复制, 需要重新从 TPanel 中继承出一个类来(譬如是 TMyPanel), 把 TEdit 包含在新的类中.运行效果图:

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.