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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM