• delphi 窗体的创建和释放


    Delphi中的窗体分为模式窗体和无模式窗体。二者的区别在于,用户可以在无模式窗体和其他窗体之间切换。这样,用户就可以同时工作于一个应用程序的几个部分。Delphi中窗体的初始化有两种情况,动态创建,和自动创建。通过show显示一个无模式窗体,ShowModal显示一个模式窗体。窗体有创建对应的也要考虑释放问题。当关闭一个窗体时,窗体并没有真正从内存中释放掉,它仍然存在于内存中,除非关闭了主窗体。因为模式窗体于无模式窗体的不同,所以二者的释放处理也有不同。

    模式窗体的创建与释放

    因为模式窗体可以判断什么时候关闭窗体,可以用一下代码来创建和释放窗体。

    begin
      ModalForm := TModalForm.Create(Application);//动态创建窗体
      try
        ModalForm.ShowModal;//显示模式窗体
      finally
        ModalForm.Free; //释放窗体实例
        //ShowMessage(BoolToStr(ModalForm = nil));
        ModalForm := nil; //把窗体变量设为nil
        //ShowMessage(BoolToStr(ModalForm = nil));
      end;
    end;
    

    非模式窗体的创建与释放

    begin
      Form1 := TForm1.Create(Application);
      Form1.show;
    end;
    

    用上述代码会导致每次都创建窗体实例,从而消耗了大量的内存。我们可以考虑让窗体只创建一次,同时在窗体关闭的时候将释放掉。

    begin
      if not Assigned(ModalLessForm) then //确保只创建一个窗口
      begin
        ModalLessForm := TModalLessForm.Create(Application);
      end;
      ModalLessForm.Show;
    end;
    

    以上代码就是一个单例模式,确保只创建一次。当关闭窗体后,如果希望在内存中释放掉,就要处理器onClose事件,吧Action设为caFree,同时还要在onDestroy事件中将窗体变量指向nil。

    procedure TModalLessForm.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      action := caFree; //当关闭窗口时释放窗体
    end;
    
    procedure TModalLessForm.FomDestroy(Sender: TObject);
    begin
      ModalLessForm := nil; //在窗口销毁时,把modalLessForm变量设为nil
    end;
    
  • 相关阅读:
    java字节中的基本类型的职业的数目 (采访总是问)
    hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)
    Ubuntu Server 14.04 LTS(64bit)已安装 weblogic Server 12c(12.1.3) Zip Distribution
    Tyvj P1015 公路骑 (DP)
    编程算法
    POJ 2502 Subway (Dijkstra 最短+建设规划)
    android_Activity生命周期功能
    ftk学习记录(脚本文章)
    2013年周二
    2013年第32周星期1
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4770490.html
Copyright © 2020-2023  润新知