DELPHI的close不是释放窗体的,只是相当于HIDE,
窗体并不真正释放

解决方案 »

  1.   

    你并没释放窗口。 
    Delphi里面的类的变量其实是指向类的实例的指针。
    clientFrm:=nil 只是将指针置空,并没有将指针所指的空间释放出来。
    需要 clientFrm.Free 才行(但是不能写在OnClose里)
      

  2.   

    请问楼上:action:=cafree难道没有释放窗体吗?clientfrm.free应该写在那儿?
      

  3.   

    if ClientFrm = nil  then begin
       ClientFrm:=TClientInputFrm.Create(self);
       ClientFrm.ShowModal;
       ClientFrm.free;
       ClientFrm ;= nil;
    end;
      

  4.   

    ShowModal的窗体可以这样写procedure TMainFrm.N31Click(Sender: TObject);
    begin  
      if ClientFrm = nil  then
         ClientFrm:=TClientInputFrm.Create(self);
      ClientFrm.ShowModal;
      ClientFrm.free;
    end;
      

  5.   

    ShowModal的窗体可以这样写procedure TMainFrm.N31Click(Sender: TObject);
    begin  
      if ClientFrm = nil  then
         ClientFrm:=TClientInputFrm.Create(self);
      ClientFrm.ShowModal;
      ClientFrm.free;
    end;执行到ShowModal时 进入onshow事件
    窗体关闭后回来  继续执行ClientFrm.free
      

  6.   

    在你想关闭并释放内存的窗体的onclose事件中加入
    Action:=caFree;参数:caNone,窗口不允许被关闭,点了右上角的X也没有任何事情发生
    caHide,窗口没有关闭,而是隐藏,程序可以继续访问该窗口
    caFree,窗口被关闭,占用的内存被释放
    caMinimize,窗口被最小化,而不是被关闭,是MDI子窗口的默认Action除了MDI子窗体外,一般的窗体调用close方法时都真正被关掉了。如果你不放心,就加上Action:=caFree;吧。
      

  7.   

    其实Action:=caFree就可以释放窗口内存的,只是Delphi好像不会立即释放,它会等到所有对这个窗口的引用全部结束以后才释放。