程序启动和退出时的执行顺序



总原则:

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)


以上内容整理自这里

标签:Delphi

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://evelee.net/blog/?id=17