同じコントロールを名前を変えてコピーする方法
{{{ procedure CopyControl( NewControl : TControl; // 作成するItem SourceControl : TControl; // 元にするItem ParentControl : TWinControl; // おやControl NewName : string ); const BufferSize = $4000; var Reader: TReader; Writer: TWriter; Stream :TMemoryStream; NameBack : string; begin //SrcComp := diValveBase; NameBack := SourceControl.Name; SourceControl.Name := ''; Stream := nil; //RegisterClass( TDspItem );
try Stream := TMemoryStream.Create; Writer := TWriter.Create( Stream, BufferSize ); try Writer.Root := SourceControl.Owner; Writer.WriteSignature; Writer.WriteComponent(SourceControl); Writer.WriteListEnd; finally FreeAndNil( Writer ); end;
Reader := TReader.Create(Stream, BufferSize ); try Reader.Root := SourceControl.Owner; Reader.Owner := SourceControl.Owner; Reader.Parent := SourceControl.Parent; Reader.Position := 0; Reader.BeginReferences; try Reader.ReadSignature; Reader.ReadComponent(NewControl); Reader.FixupReferences; finally Reader.EndReferences; end; finally Reader.Free; end; NewControl.Parent := ParentControl; NewControl.Parent := ParentControl; NewControl.Name := NewName; finally Stream.free; SourceControl.Name := NameBack; end; end; }}}