如何复制组件/控件?

Zig*_*giZ 3 delphi delphi-7

可能重复:
在运行时复制组件

我有一个TMyControl(Control1)与它自己的属性/事件.
如何创建Control2具有完全相同属性/事件的重复实例?


更具体地说,我想克隆现有TADODataSet的流媒体字段(和一些事件):

object ADODataSet1: TADODataSet
  Connection = ADOConnection1
  CursorType = ctStatic
  AfterOpen = ADODataSet1AfterOpen
  CommandText = 'select top 10  * from Polls'
  Parameters = <>
  Left = 224
  Top = 40
  object ADODataSet1PollID: TGuidField
    FieldName = 'PollID'
    FixedChar = True
    Size = 38
  end
  object ADODataSet1Title: TWideStringField
    FieldName = 'Title'
    Size = 255
  end
  object ADODataSet1Description: TWideStringField
    FieldName = 'Description'
    Size = 4000
  end
  object ADODataSet1PollType: TIntegerField
    FieldName = 'PollType'
  end
end
Run Code Online (Sandbox Code Playgroud)

既然你关闭了这个问题,如果我问一个新问题"如何复制一个TADODataSet持久字段",你会考虑重复吗?

Uwe*_*abe 7

以下代码可能会给出一些指示:

unit Unit130;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls;

type
  TForm130 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    edit2: TEdit;
  public
  end;

var
  Form130: TForm130;

implementation

{$R *.dfm}

procedure TForm130.Button1Click(Sender: TObject);
var
  component: TComponent;
  stream: TMemoryStream;
begin
  RegisterClass(TEdit);
  stream := TMemoryStream.Create;
  try
    stream.WriteComponent(edit1);
    stream.Position := 0;
    component := stream.ReadComponent(nil);
    edit2 := component as TEdit;

    { this is necessary to make the following InsertComponent work }
    edit2.Name := 'Edit2';
    InsertComponent(edit2);

    edit2.Parent := Self;
    edit2.Top := edit2.Top + 30;
  finally
    stream.Free;
  end;
end;

end.
Run Code Online (Sandbox Code Playgroud)