function CloneComponent(AAncestor: TComponent): TComponent;
var
XMemoryStream: TMemoryStream;
XTempName: string;
begin
Result:=nil;
if not Assigned(AAncestor) then
exit;
XMemoryStream:=TMemoryStream.Create;
try
XTempName:=AAncestor.Name;
AAncestor.Name:='clone_' + XTempName;
XMemoryStream.WriteComponent(AAncestor);
AAncestor.Name:=XTempName;
XMemoryStream.Position:=0;
Result:=TComponentClass(AAncestor.ClassType).Creat e(AAncestor.Owner);
if AAncestor is TControl then
TControl(Result).Parent:=TControl(AAncestor).Paren t;
XMemoryStream.ReadComponent(Result);
finally
XMemoryStream.Free;
end;
end;
از:
http://www.delphi3000.com/articles/article_4811.asp