好了,進入正題,首先說明initialization 和 finalization 在代碼單元中的位置:
************************************************************
unit Unit1; interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('1 FormCreate');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ShowMessage('1 Destroy');
end;
initialization
ShowMessage('1 ini');{單元初始化代碼}
finalization
ShowMessage('1 final');{單元退出時的代碼}
end.
************************************************************
initialization —— 在單元中放在文件結尾前,包含用來初始化單元的代碼,它在主程序運行前運行並且只運行一次。
finalization —— 在單元中放在 initialization 和 end. 之間,包含了單元退出時的代碼。在程序退出時運行並且只運行一次。
OnClose —— 在點擊關閉按鈕或執行該事件時調用。
OnCreate —— 在窗體創建時調用。(我的感覺:該事件是在窗體創建之後,即執行構造函數後才執行的)
OnDestroy —— 在窗體銷燬時調用,一般用來銷燬程序員自己定義(自己定義、創建,而不是直接從控件板拖拉過來的控件)的對象、變量、指針等等。(與析構函數的關係我還沒弄清)
下面是執行順序(如果程序中沒有 initialization、 OnCreate、 OnClose、 OnDestroy、 finalization 中的任何一項,則相應跳過即可):
程序啓動 --> 執行 initialization 處的代碼 --> 執行窗體的構造函數並創建相應窗體和單元中的對象(如拖拉的控件對象,全局變量等) --> 執行 OnCreate 事件 --> 程序運行 --> 關閉主窗體(此處指調用主窗體的Close或點擊主窗體的關閉按鈕) --> 執行 OnClose 事件 --> 執行 OnDestroy 事件 --> 執行 finalization 處的代碼
以上是對於單個窗體而言