2025年2月20日 星期四

Delphi 表單建立/釋放時的事件順序

在 Delphi 中,當一個表單 (Form) 被建立時,會依序觸發以下事件:

Constructor (Create):

在這個階段,表單的物件會被建立,但視窗還沒有初始化。
如果使用的是 TForm.Create(nil),此時還沒有分配 Parent,也沒有顯示。

CreateWnd:

建立表單的 Windows 視窗句柄 (Handle)。
此時可以進行與視窗句柄相關的操作,例如 API 呼叫。

Loaded:

當表單是從 DFM (表單文件) 加載時會觸發。
所有的組件屬性和子組件都已經被初始化。
適合在這裡進行一些屬性設定或初始化動作。

OnCreate (或 FormCreate 事件):

當表單完成建立時觸發。
通常用於初始化變數、設定控制項屬性或載入資料。

OnShow:

當表單即將顯示在螢幕上時觸發。
表單已經可見,但還沒有繪製完全。
適合用於需要在顯示時更新畫面的操作,例如 UI 資料刷新。

OnActivate:

當表單獲得焦點 (成為最上層視窗) 時觸發。
每次表單被切換回來時都會觸發,不只是第一次顯示時。

OnPaint:

當表單需要重繪時觸發。
一般用於自訂繪圖邏輯,例如畫布 (Canvas) 操作。

OnResize (可選,視情況而定):

當表單大小改變時觸發。
可用於調整內部控制項的佈局。



當表單關閉或釋放時,事件順序如下:

OnCloseQuery:

在關閉前詢問是否允許關閉 (CanClose 參數)。
可用於彈出確認視窗或檢查條件。

OnClose:

當表單正在關閉時觸發。
可透過 Action 參數決定是隱藏還是釋放表單。

OnHide:

當表單從螢幕上消失時觸發。

OnDestroy (或 FormDestroy 事件):

在表單物件被釋放前觸發。
通常用於釋放資源、清理記憶體或結束程序。

Destructor (Destroy):

最後的資源釋放動作,然後表單物件從記憶體中移除。


From Char-GPT