假如:我知道一个form的名字是‘form1'(它对应的类是‘Tform1'),
通常的创建窗体的的方法是:form1:=Tform1.create(AOwner);
                      或:AOwner.CreateForm(Tform1, Form1); 现在我的form的类及其名字都是放在string变量中,
该怎么办呢,或者有别的什么方法吗?

解决方案 »

  1.   

    思路有问题,不该用这个方法来创建Form,
    虽然Delphi提供了RTTI能间接的实现你的要求,但是还是建议你换一个思路。
      

  2.   

    参考 pazee(耙子) 的意见,很有道理//TForm2 中:
    initialization
    RegisterClass(TForm2);
    finalization
    UnRegisterClass(TForm2);
    调用示例如下
    var
    PackageModule: HModule;
    AClass: TPersistentClass;
    begin
    PackageModule := LoadPackage('Package1.bpl');
    if PackageModule <> 0 then
    begin
    AClass := GetClass('TForm2'); // create inherited class
    if AClass <> nil then
    with TComponentClass(AClass).Create(Application)
    as TForm do // type as base class
    begin
    ShowModal;
    Free;
    end;
    UnloadPackage(PackageModule);
    end;
    end;
    官方相关资料:http://www.mdata.gr/MDataNews/DeveloperTips/advanceddynamicpackages.htm
    附件中是完整的示例代码。
      

  3.   

    http://www.51delphi.com/delphi/showtl?ID=50573http://www.7880.com/Info/Article-18daea40.html
      

  4.   

    http://blog.csdn.net/yeeyee/通过类名创建窗体。
      

  5.   

    现在我的form的类及其名字都是放在string变量中,
    该怎么办呢,或者有别的什么方法吗?你的类如果有多个,可以用一个TList来保存起来。
    如果只有一个,为什么要用字符串保存呢。设计有问题
      

  6.   

    同意
    linzhengqun(风。愿我能) ( ) 信