请问:
form1.close;
active:=cafee;
form1.free;
有何区别?
是否form1.close;关闭窗体并不释放窗体和其上控件占用资源?
active:=cafree;既关闭窗体又释放所有资源?
active:=cafree等同form1.free;?
还有我试了一下active:=cafree;提示can't assign a read only property。
why?
再:释放了主窗体就不需释放其他窗体了吗?
虽然问题简单,但是还请有人彻底解答!
上个贴子没人回答彻底,希望这个能解吾之惑。

解决方案 »

  1.   

    form1.close;
    如果form1是主窗口,则释放所有的资源。如果是子窗口,则要在onclose(非模式窗体)事件中加入active:=cafee;才能释放该窗口的资源,否则只是关闭窗口的显示。
    form1.free;
    如果是模式窗体,active:=cafee;也不能释放所占资源,这时在showmodal;后加上一行,form1.free,即可释放该窗体所占用的资源了。
      

  2.   

    楼上的可谓是功力强劲,
    补充说明一下: 
    我用FreeAndNil会更好。
      

  3.   

    假如建立有form1(主窗体)、form2两个窗体的程序;
    1、是不是在form1.close后释放了所有窗体的资源呢?
    2、什么是非模式窗体,什么是模式窗体?
      

  4.   

    1。你的想法正确
    2。模式窗口就是弹出窗口,它弹出后,这个窗口前面的窗口不能被操作。
       如,拖动等等,ShowMessage函数创建的窗口就是模式窗口,我习惯叫摸态窗
       口。
    3。你说的active:=caFree是错的。如果一个窗口不是主窗口,在一般情况下,点击
       窗口的叉叉按钮时,实际不是释放该窗口,而仅仅是隐藏了该窗口,相当与调用
       了该窗口的hide方法,你在需要时还可以把它show出来。如果你在该窗口的
        onclose事件中写入了代码。如下:
       procedure TForm2.FormClose(Sender: TObject; var Action:   
         TCloseAction);
       begin
         Action := caFree;
       end;   
       那么在点该窗口的叉叉时,该窗口就会释放。注意不是active:=cafee;
       
      

  5.   

    是action:=caFree.假如建立有form1(主窗体)、form2两个窗体的程序;是不是在form1.close后释放了所有窗体的资源呢?是的
      

  6.   

    谢谢各位,回答的非常清楚。
    但是:
    1、点击主窗体的叉叉将主窗体关闭时(不在form1.onclose过程中加入form1.close;)是不是就释放了所有的资源呢?
    别嫌我烦,问完我就明白了。
    在线等待,立刻结贴。
      

  7.   

    1、点击主窗体的叉叉将主窗体关闭时(不在form1.onclose过程中加入form1.close;)是不是就释放了所有的资源呢?不用加入FORM1.CLOSE 就可以释放所用资源!