譬如在一个 TPanel 中包含一个 TEdit; 在复制 TPanel 时, 若要连同 TEdit 一起复制, 需要重新从 TPanel 中继承出一个类来(譬如是 TMyPanel), 把 TEdit 包含在新的类中.
运行效果图:
![](https://www.cnblogs.com/images/cnblogs_com/del/129733/o_8441.gif)
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.