我发现有的人在窗体OnClose事件写上
Action := caFree;
表示窗体关闭时释放窗体所占的内存。而我以前一般不处理窗体OnClose事件,那么应用程序关闭时窗体所占内存会自己释放掉吗?还是一定要处理OnClose并且写上Action := caFree;才能释放掉内存?

解决方案 »

  1.   

    不用写,Onclose是Tform的一个方法,当程序结束时Tform自然会被析构(正常情况下),析构就会释放内存,写cafree多见于一些多窗体的应用程序,这些程序中为了少占用内存,再关闭一些窗体是释放掉内存,而正常情况下要到程序结束才释放
      

  2.   

    同意vavyboyleon(一天到晚加班的驴)
      

  3.   

    MDI程序子窗口不写好像关不了,只是最小化或是隐藏了吧?
      

  4.   

    模式Form的标准写法: 
    ModalForm:=TModalForm.Create(Application);
    try
      if ModalForm.ShowModal=mrOK then
        { do something}
    finally
      ModalForm.Free;
    end;
    无模式Form的标准写法: 
    SomeForm:=TSomeForm.Create(Application);
    SomeForm.Show;在Form的OnClose事件中要将此Form释放掉:
    procedure TSomeForm.FormClose(Sender:TObject; var Action:TCloseAction);
    begin
      Action:=caFree;
    end;
    防止出现一个Form的多个实例
    if not Assigned(SomeForm) then // 也可写为 if SomeForm=nil then
    SomeForm:=TSomeForm.Create(Application);
    SomeForm.Show;在Form的OnClose事件中要将此Form释放掉:
    procedure TSomeForm.FormClose(Sender:TObject; var Action:TCloseAction);
    begin
      Action:=caFree;
    end;同时在Form的OnDestroy事件中将此Form变量设为nil:
    procedure TfrmMaterial.FormDestroy(Sender: TObject);
    begin
    SomeForm:=nil;
    end;