Delphi窗體的建立與銷燬基礎教程
阿新 • • 發佈:2019-02-09
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;