可能重复:
在运行时复制组件
我有一个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)