当我们单击右窗体上角的 × 后,窗体就会关闭。
我想问一下:
这个单击事件亦或是鼠标左键的WM_LBUTTONDOWM、LBUTTONUP消息最终(不用讲消息机制)是由什么方法处理的。
是 TForm1.FormClose?还是TForm1.FormDestroy?又或者是其他什么方法?这里还有一点搞不明白我并没有实现TForm1.FormClose、TForm1.FormDestroy,难道这些方法不用我们自己实现?这两个方法到底做什么用?

解决方案 »

  1.   

    FormClose/FormDestroy/FormCloseQuery等事件机制,提供了用户干涉或参数窗体关闭/销毁过程的可能,而不是必须。例如,FormCloseQuery,可以给个参数拒绝关闭。如果没有这些方法,在窗体关闭的开始、中间、结束的各个步骤,用户无法参与一些相关工作:关闭数据库、杀掉多线程、清楚临时文件,等等。
      

  2.   

    是WM_COMMAND消息, 参数:IDCANCEL(好象是这个名字吧),WPARAM,还是LPARAM忘了.FormClose,如果执行到这个事件了,窗口关掉了.但是,对象还没释放.
    FormDestroy,如果执行这个,窗口关了,对象即将释放.搞delphi的,很多人对windows操作系统里面的窗口的概念,和delphi里面的TForm类,概念分不清楚.
      

  3.   

    你的另一点疑问:这里还有一点搞不明白我并没有实现TForm1.FormClose、TForm1.FormDestroy,难道这些方法不用我们自己实现?这两个方法到底做什么用?并不需要你自己去实现,delphi的vcl代码已经实现了.
    FormClose, FormDestroy,这个,是事件.我一般这么认为:delphi里面的事件,其实就是回调.
    给控件添加事件,并在事件里面写代码,就是告诉vcl:我已经在回调函数里面写的东西了,你在特定的时候,就通过这个回调地址,调我的代码去执行吧!那么在vcl代码的实现过程(比如关闭窗口)中,到关闭窗口的时候,它会去调用你给他写的回调函数(formclose事件),通知你:我关窗口了.至于你想在我关窗口的时候,做什么事,你就在这个事件中写好,我肯定会让它执行的.