我的程序有许多窗口,但是我知道这样一次运行全部创建不合理,如何让等到调用的时候才创建,不用的时候就释放?
据我了解delphi有个project/options.../forms,左边是aoto-create forms,右面是available forms,但是问题是当我把左边一下不用创建的窗口移到右面时候就无法运行程序了,不知道要在哪里调试?
能不能给我个简单的例子?多谢了!

解决方案 »

  1.   

    如果你有窗体Form2,那么在你的主窗体Form1中放一个Button,它的单击事件:procedure TForm1.Button1Click(Sender: TObject);
    begin
    Form2:=TForm2.Create(nil);
    form2.Show;
    end;
      

  2.   

    如果Form2对应的单元名是Unit2,那么在写上面代码之前要先加上:uses Unit2;
      

  3.   


    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    try
      Form2:=TForm2.Create(Application); //创建窗体
      Form2.ShowModal; 
    finally
      Form2.Free;  //释放窗体
      Form2:= nil;
      end;
    end; 
      

  4.   

    1.按照你的方法
      移到右面
    2.如楼上的方法
      uses unit2;
     procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    Form2:=TForm2.Create(nil); 
    form2.Show; 
    end; 
     
      

  5.   

    那怎么当关闭form2的时候让自动释放呢?直接form2.close就行了吗?
      

  6.   


    这种方法比
    Form2:=TForm2.Create(nil); 
    form2.Show; 
    有什么区别呢?
      

  7.   

    ShowModal出来的窗体会使程序其他窗口无法锁定。。跟弹出消息框效果差不多。。
    show出来就跟正常显示一样楼主22分怎么弄的???
      

  8.   

    据我了解delphi有个project/options.../forms,左边是aoto-create forms,右面是available forms,但是问题是当我把左边一下不用创建的窗口移到右面时候就无法运行程序了,不知道要在哪里调试? LZ你这样做是正确的,一般是数据模块或者主窗体是一定要放在左边的aoto_create forms
    不用的可以放在available forms当要用的时候在调用
    ex:form2:=Tform2.create(self);
       form2.showmodel;   
       form2.free;但你的项目里面的某些功能需要用到某些窗体对象,但这些窗体又不需要显示,这些窗体也需要放在aoto-careate forms或者在主窗体创建的时候写程序加载。我怀疑你的某些窗体对象是要用而不要显示,你又不知道把auto-create forms你认为不用的全移除了,所以才出错
      

  9.   

    可以在Project选项里面设置的  把你不需要启动的窗体直接去除就可以了 
      

  10.   

    从dpr 文件中将除主窗体外的其它窗体创建都删除.然后窗体的创建都调用下面这样的方法.
    type
      TForm2 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;function CreateWinForm2_Show:Boolean;
    function CreateWinForm2_ShowModal:Boolean;implementationvar
      Form2: TForm2; //将原来的定义移动到这里.{$R *.dfm}function CreateWinForm2_Show:Boolean;
    begin
      if Not Assigned(Form2) then
        Form2:=TForm2.Create(Application);  Form2.Show;
      result:=true;
    end;function CreateWinForm2_ShowModal:Boolean;
    var
      form:TForm2;
    begin
     result:=false;
     form:=TForm2.Create(application);
     form.showmodal;
     result:=mrOK=form.modalresult;
     form.free;