将你要动态创建的窗体设计好,比如上边要有的控件,事件等,然后在要创建的地方写以下代码:
Application.CreateForm(TFrom1, Form1);
try
   Form1.ShowModal;
   ...
   ...
finally
   Form1.Free;
end;
记住这样创建的窗体一定要释放,否则可能会反复创建若干窗体出来而内存得不到释放。
动态创建窗体的方法不止这一个,也可以使用类的方法TForm1.Create(...),这两种方法在性质上有所区别,不过你也不用关心这么多了,达到目的就行。

解决方案 »

  1.   


    非模式窗体:
    var Form1: Tform1;
    begin
      form1 := TForm1.create(self);
      form1.show;
    end;模式窗体:
    var Form1: Tform1;
    begin
      form1 := TForm1.create(self);
      form1.showmodal;
      form1.release;
    end;
      

  2.   

    procedure CreateDynamicForm(FormClass: TFormClass; var Instance; AOwner: TComponent);
    begin
      if not Assigned(Pointer(Instance)) then
        TForm(Instance) := FormClass.Create(AOwner);
      TForm(Instance).Show;
    end;

    var
      Tmp: TForm2;
    则 CreateDynamicForm(TForm2, Tmp, Self);
    要注意的是在相应窗口的OnClose里
    Action := caFree;
    Tmp := nil;
    Tmp还需要是全局的
      

  3.   

    你看一下Inputdialog函数的源程序就知道了。