1\先新建一个form1,让它show as text; 2\将dfm文件的内容覆盖它的内容. 3\再让它show as form 4\选中上面的所有控件.,复制. 5\再新建一个form2,粘贴. 6\删除form1 7\然后从form2上动态继承就可以了.漏见.
Just a exampleprocedure TForm1.Button1Click(Sender: TObject); var aa :Tbutton; begin aa := Tbutton.Create(self); aa.Left := 20; aa.Top := 20; aa.Height := 40; aa.Width := 40; aa.Parent := form1; end;
你可以看看下列代码,中间的if分支语句可以有更加简便的方法,你到书中找找. var i:integer=2; implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); var str:String; classref:TClass; myobj:TObject; begin if inputQuery('class name','class name',str) then begin ListBox1.Clear; ClassRef:=findclass(str); while ClassRef <> nil do begin myobj:=classRef.Create; if myObj is TButton then begin TButton(myObj).Create(self); TButton(myObj).parent:=self; TButton(myObj).Name := 'Button'+inttostr(i); TButton(myObj).SetBounds(i,i*30,80,30); TButton(myObj).visible:=True; TButton(myObj).Onclick:=Button1Click; i:=i+1; end else if myObj is TLabel then begin TLabel(myObj).Create(self); TLabel(myObj).parent:=self; TLabel(myObj).Name := 'Label'+inttostr(i); TLabel(myObj).visible:=True; end; ListBox1.Items.Add(ClassRef.ClassName); ClassRef := ClassRef.ClassParent ; end; end; end;initialization Registerclasses([TButton,TLabel]); end.
2\将dfm文件的内容覆盖它的内容.
3\再让它show as form
4\选中上面的所有控件.,复制.
5\再新建一个form2,粘贴.
6\删除form1
7\然后从form2上动态继承就可以了.漏见.
var
aa :Tbutton;
begin
aa := Tbutton.Create(self);
aa.Left := 20;
aa.Top := 20;
aa.Height := 40;
aa.Width := 40;
aa.Parent := form1;
end;
动态建立窗体和窗体上面的控件。
在FormCreate的时候,动态控制控件位置和大小!
FileStrm: TFileStream;
StrStrm: TStringStream;
BinStrm: TMemoryStream;
Button: TButton;
begin
FileStrm := TFileStream.Create('ReadButton.dfm', fmOpenRead);
StrStrm := TStringStream.Create('');
BinStrm := TMemoryStream.Create;
Button := TButton.Create(Self); FileStrm.Position := 0;
StrStrm.CopyFrom(FileStrm, FileStrm.Size);
StrStrm.Position := 0;
ObjectTextToBinary(StrStrm, BinStrm);
BinStrm.Position := 0;
BinStrm.ReadComponent(TComponent(Button));
Form1.InsertControl(Button);
FreeAndNil(FileStrm);
FreeAndNil(StrStrm);
FreeAndNil(BinStrm);
end;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
可行,但是control的类型怎么来处理呢?
和<<dephi5.0的开发指南>>的有关.这是一项比较难的技术.我也不是很明白.
你可能要用到
1.Registerclasses[class1,class2,...]
2.FindClass("class1")或GetClass("class1")取得类引用
3.用类引用.create创建类实例引用
4.使用运行期信息(is,as)
5.用类构造函数创建类实例
6.使用运行期信息设定类实例的属性值
供你参考
var
i:integer=2;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
str:String;
classref:TClass;
myobj:TObject;
begin
if inputQuery('class name','class name',str) then
begin
ListBox1.Clear;
ClassRef:=findclass(str);
while ClassRef <> nil do
begin
myobj:=classRef.Create;
if myObj is TButton then
begin
TButton(myObj).Create(self);
TButton(myObj).parent:=self;
TButton(myObj).Name := 'Button'+inttostr(i);
TButton(myObj).SetBounds(i,i*30,80,30);
TButton(myObj).visible:=True;
TButton(myObj).Onclick:=Button1Click;
i:=i+1;
end
else if myObj is TLabel then
begin
TLabel(myObj).Create(self);
TLabel(myObj).parent:=self;
TLabel(myObj).Name := 'Label'+inttostr(i);
TLabel(myObj).visible:=True;
end; ListBox1.Items.Add(ClassRef.ClassName);
ClassRef := ClassRef.ClassParent ;
end;
end;
end;initialization
Registerclasses([TButton,TLabel]);
end.
我想通过ReadComponent是可以的。
T对象 DX:=T对象.Create(self)
定义属性:
dx.属性:=属性值;