总原则:
1. initialization 的执行顺序首先看彼此单元之间是否有调用关系,被调用的先执行,然后再看工程文件的uses的顺序。
2. OnCreate 的执行顺序由工程单元中的如下类似代码决定:
Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3);
3. OnDestroy与OnCreate的顺序相反。
4. finalization 与 initialization 的顺序相反。
5. OnClose
当调用窗体的Close或点击关闭按钮时调用该事件。
主窗体Close后,程序就退出。
非主窗体Close,仅仅是Close本窗体。
6. 直接用Application.Terminate强制退出程序时,不调用OnClose事件。但 OnDestroy 和 finalization 要执行。
以下举例:
一. 单窗口
程序启动 --> initialization --> 执行窗体的构造函数并创建相应窗体和单元中的对象 --> OnCreate --> 程序运行
程序运行 --> 关闭主窗体(指调用主窗体的Close或点击关闭按钮) --> OnClose --> OnDestroy --> finalization
二. 多窗口
程序启动 --> initialization(Form1 --> Form2 --> Form3)--> 执行窗体的构造函数并创建相应窗体和单元中的对象 --> OnCreate (Form1 --> Form2 --> Form3) --> 程序运行
程序运行 --> 关闭主窗体(指调用主窗体的Close或点击关闭按钮)--> Form1的OnClose --> OnDestroy (Form3 --> Form2 --> Form1) --> finalization(Form3 --> Form2 --> Form1)
三. Form1中uses 一下Unit2(Form2的代码单元)
程序启动 --> initialization(Form2 --> Form1 --> Form3)--> 执行窗体的构造函数并创建相应窗体和单元中的对象 --> OnCreate (Form1 --> Form2 --> Form3) --> 程序运行
程序运行 --> 关闭主窗体(指调用主窗体的Close或点击关闭按钮)--> Form1的OnClose --> OnDestroy (Form3 --> Form1 --> Form2) --> finalization(Form3 --> Form1 --> Form2)