zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4770490.html
Copyright © 2011-2022 走看看