> The term for this is "cloning" an object.
>
> There is no built in way of doing this in Delphi, and there are issues
> involved in any cloning operation; e.g. are you interested in a shallow
> clone (just the one object), or a deep clone (your one object, and all
> objects to which it refers)?
>
> Probably a google newsgroup search on Delphi+cloning+objects
> might give you
> a few ideas on how to progress...
If your object inherits from TComponent the following code will clone a
component. I have used it to clone TButtons and few other simple visual
components successfully.
unit Cloner;
interface
uses
SysUtils, Classes, Controls;
function Replicate(C: TComponent): TComponent;
implementation
procedure CloneComponent(C1: TComponent; C2: TComponent);
//
// This procedure clones the properties of C1 and writes them to C2.
// C1 and C2 must be of the same type. Use it for components that do
// not have an Assign method.
//
var
theStream: TMemoryStream;
tmpS: string;
begin
if C1.ClassType <> C2.ClassType then
raise EComponentError.Create('Object types are incompatible');
if C1 is TControl then
TControl(C2).Parent := TWinControl(C1).Parent;
theStream := TMemoryStream.Create; // Create the memory stream.
with theStream do try
tmpS := C1.Name;
C1.Name := EmptyStr;
WriteComponent(C1); // Write C1 properties to stream
C1.Name := tmpS;
Seek(0, soFromBeginning); // Position to beginning of stream.
ReadComponent(C2); // read properties from stream into C2
finally
Free; // IAC, free stream.
end;
end;
function Replicate(C: TComponent): TComponent;
//
// This function "replicates" component C and returns
// a new component whose type and properties match
// those of C.
//
begin
Result := TComponentClass(C.ClassType).Create(C.Owner); // Create
component }
CloneComponent(C, Result); // Clone it }
end;
end.
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED]
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/