1. 程式人生 > >Delphi窗體的建立與銷燬基礎教程

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;