一个字任符串,放的是一个类名。比如: Str:='TButton';
我想能不能,根据str的内容,实时创建类的实例。

解决方案 »

  1.   

    客观地说,这个想法不符合编译类型开发工具的编程思路。
    但是简单的办法可以做一个判断或者列表。if str='TButton' then
      sss:= TButton.Create(self);
    if str='TPanel' then
      sss:= TPanel.Create(self);
    .....换一个思路
      

  2.   

    case str of 
    TButton: obj:= TButton.create(self);
    ...    : ...
    end;不过太麻烦,如果类型多的话。网上应该有控件,将字符串翻译成delphi代码的控件。那么你可以用 str:= 'obj:= '+str+'.create(self)'
    然后将str译成delphi代码。
      

  3.   

    这个控件好像叫
     DELPHIN 或者叫 DELPHN 我忘掉拉。
    你找找看。
      

  4.   

    Delphi本身的Form就是这么实现的。VC的MFC也有相应的DYNAMIC_CREATE的措施。
    不错都比较复杂。你可以看看ReadComponent、TComponent的帮助和代码。
    或是侯捷的《深入浅出MFC》(VC, MFC),介绍的比较详细。读这些对提高水平有些好处,但是如果想用在代码上嘛。通常不建议这么做,太过繁杂。是在要用的话ReadComponent, WriteComponent......这些就足够了。
      

  5.   

    首先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公司打击盗版,我机器上不能装,只能靠记性)