客观地说,这个想法不符合编译类型开发工具的编程思路。 但是简单的办法可以做一个判断或者列表。if str='TButton' then sss:= TButton.Create(self); if str='TPanel' then sss:= TPanel.Create(self); .....换一个思路
case str of TButton: obj:= TButton.create(self); ... : ... end;不过太麻烦,如果类型多的话。网上应该有控件,将字符串翻译成delphi代码的控件。那么你可以用 str:= 'obj:= '+str+'.create(self)' 然后将str译成delphi代码。
首先Delphi有一种特殊的类型,它是这么定义的: type TComponentClass = class of TComponent; 其次,Delphi大概提供了RegisterClasses和FindClass这两个函数。因此可以这样: 首先程序启动时,调用注册代码: RegisterClasses([TButton, TForm, TLabel, TListBox, ..., TEdit]);然后程序运行的时候可以 var a: TComponentClass; b: TComponent; a := TComponentClass(FindClass('TButton')); b := a.Create(Application); 大概就这些,具体细节我记不住。这就是RTTI,Delphi中的算是比较初级的。因为没有具体的RTTI地类。Java和C#在这方面都比Delphi强大。 (Borland公司打击盗版,我机器上不能装,只能靠记性)
但是简单的办法可以做一个判断或者列表。if str='TButton' then
sss:= TButton.Create(self);
if str='TPanel' then
sss:= TPanel.Create(self);
.....换一个思路
TButton: obj:= TButton.create(self);
... : ...
end;不过太麻烦,如果类型多的话。网上应该有控件,将字符串翻译成delphi代码的控件。那么你可以用 str:= 'obj:= '+str+'.create(self)'
然后将str译成delphi代码。
DELPHIN 或者叫 DELPHN 我忘掉拉。
你找找看。
不错都比较复杂。你可以看看ReadComponent、TComponent的帮助和代码。
或是侯捷的《深入浅出MFC》(VC, MFC),介绍的比较详细。读这些对提高水平有些好处,但是如果想用在代码上嘛。通常不建议这么做,太过繁杂。是在要用的话ReadComponent, WriteComponent......这些就足够了。
type
TComponentClass = class of TComponent;
其次,Delphi大概提供了RegisterClasses和FindClass这两个函数。因此可以这样:
首先程序启动时,调用注册代码:
RegisterClasses([TButton, TForm, TLabel, TListBox, ..., TEdit]);然后程序运行的时候可以
var
a: TComponentClass;
b: TComponent; a := TComponentClass(FindClass('TButton'));
b := a.Create(Application);
大概就这些,具体细节我记不住。这就是RTTI,Delphi中的算是比较初级的。因为没有具体的RTTI地类。Java和C#在这方面都比Delphi强大。
(Borland公司打击盗版,我机器上不能装,只能靠记性)