可能重复:
在运行时复制组件
我有一个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持久字段",你会考虑重复吗?
以下代码可能会给出一些指示:
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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3572 次  |  
        
|   最近记录:  |