The only problem here being that just the published properties will be cloned, no internal state variables.
Nahum. > [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > wrote on > >> 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/ --------------------------------------------------------------------------- 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/