声明一个字符串,用字符串的名字作为窗体名字,动态建立窗体。
例如:
const str:string='FThinkYou';创建出来的窗体的name:=str
谢谢!

解决方案 »

  1.   

    var
      Form1 : TForm1;
    begin
      Form1 := TForm1.Create(Application);
      with Form1 do
      begin
        Name := 'FThinkYou';
        Left := 10;
        Top := 10;
        Height := 100;
        ...
        Show;
      end;
    end;
      

  2.   

    var Form: TForm;
        Str: Sting;
    begin
      Str := 'MyForm';
      With TForm.Create(Application) do
      begin
        Name := Str;
        Show
      end;
    end;
      

  3.   

    对不起,我问题说错了,对不起大家,应该是这样:
    预先生成个窗体thankYou,然后把窗体名字存到数据库等待调用,调用时用取出存的字符串:“thankYou“用字符串字符串“thankYou”动态创建窗体thankYou,窗体是预先生成的窗体thankYou
      

  4.   


    function FindComponent(const AName: string): TComponent;
    试一下
      

  5.   

    TForm(FindComponent('ThankYou')).Show;
      

  6.   

    可能我的表达有问题,谢谢大家,大家都误会了我的意思.问题是:
    预先生成个窗体thankYou,然后把窗体名字存到数据库等待调用,调用时用取出存的字符串:“thankYou“用字符串字符串“thankYou”动态创建窗体thankYou,窗体是预先生成的窗体thankYou,窗体上的控件都是编辑时生成的那样
      

  7.   

    搞了半天我还是没有明白,如果窗体像你说的预先生成了,那怎么还讲动态创建呢??既然生成了,而且你都操作过它了,那么就不存在动态创建了,你所要做的就是
    TForm(FindComponent(窗体名)).Show;就可以调用该窗体了!
      

  8.   

    就是说一个窗体在delphi中已经做好,但是当我需要时可能只知道他的名字是什么,我根本不知道预先做好的窗体类是什么,所以问题就出来了
      

  9.   

    你做好的窗体是不能放在project-->opetions-->auto create forms中的。你先看一看。
      

  10.   

    楼主,研究了一下,只要多加一个步骤,就能解决你的问题:
    就是在主窗口创建的同时,用RegisterClass方法注册你其他已经设计好的窗体类,然后看下面代码:
    procedure TForm1.TForm1.FormCreate(Sender: TObject);
    begin
      RegisterClass(TThankYou); //注册所有其他你设计好的窗口类,用法参考帮助
    end;
    然后:
    procedure TForm1.Button1Click(Sender: TObject);
    var str: string;
        Form: TForm;
    begin
      str := 'TThankYou';
      Form := TFormClass(Classes.FindClass(str)).Create(Self); //查找注册的窗体类并创建
      form.Show;
    end;
    只是多了一个步骤,很简单,另外,注册窗体类的时候可以定义一个窗体类数组一并传入RegisterClass方法中。以测试,绝对可行!
      

  11.   

    楼主如果测试可行,请加入FAQ,谢谢!
      

  12.   

    juliens(星星球)聪明,不错,想到用classes来管理窗体类,省去了自己建立管理类的步骤。
      

  13.   

    procedure TMainFrm.runProgram(strForm:string);
    var
       ClassClient:TComponentClass;
       client:TForm;
    begin
       ClassClient:=TComponentClass(FindClass(strForm));
       Application.CreateForm(ClassClient,client);
    end;
    在調用這個函數之前,必須在相應類單元文件中end.之前加上如下語句
    initialization
       RegisterClass(類名);
    finalization
       UnRegisterClass(類名);
      

  14.   

    经过试验星星球和liufuyahong适合我的题意,给分解贴