如何在程序结束之前执行一部分操作?程序结束的代码不是用的Close,是用的Application.Terminate,也有可能是其他程序.

解决方案 »

  1.   

    procedure test;
    begin
      MessageBox(0,'END','TEST',0);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    AddExitProc(test);
    Application.Terminate;
    end;end.
      

  2.   

    楼上理解错了,我是想在Application.Terminate执行后,主程序结束之前
      

  3.   

    其实在程序结束之前执行一些代码,是有很多地方的呀。
    最直接的就是在单元的finalization中写就行了。另外,调用Application.Terminate之前也可以调用AddTerminateProc,加进一个方法指针。
    在Application.Terminate调用时,会一一调用这些方法指针楼主稍看一下Application.Terminate的代码就知道怎么做了。
      

  4.   

    Application.Terminate 结束程序 还会执行 Application.Terminate后面的代码到 end ..
    实际上是调用 PostQuitMessage();
      

  5.   

    我的程序不只是用Applicatin.Terminate结束的,有可能是被别的程序结束,也有可能是在进程管理器里被结束,但在结束之前一定要执行一部分操作,这个应该怎么写
      

  6.   

    我的程序就是可以在Application.Terminate执行后,主程序结束之前执行的啊,只是你可将
    AddExitProc(test);写在
     Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      AddExitProc(test); //这里
      Application.Run;
    end.
    有关HELP:
    AddExitProc adds Proc to the exit procedure list, so that Proc is automatically executed when the application terminates. AddExitProc is not compatible with VCL package support and is provided for backward compatibility only. Do not use AddExitProc in new applications.
      

  7.   

    AddExitProc 没问题的  补充点
    Application.Terminate;
    AddExitProc(test);
    也没问题。。用 halt 必须写到前面
    AddExitProc(test);
    Halt(0);
      

  8.   

    keiy(),谢谢这位朋友的回答,我试过代码,正常结束可以执行,但在进程管理器里结束进程就不能执行了.我想要的就是不管用哪种方式结束程序都能在结束之前执行那部分操作.
      

  9.   

    进程管理器里结束进程,用的是TerminateProcess,操作系统直接将进程的内存空间收回,并消毁所有的内核对象,所以你根据得不到任何通知,如何能在这之前执行操作?
    去查阅一相《Windows高级编程》吧。如果你是想保护数据,就应该能够每隔一段时间进行保存,就象Office一样。
      

  10.   

    我用idftpserver写了一个FTP服务器程序,但程序长时间运行后,就自动结束了,但它并没有释放地址和端口,倒致我再重启这个程序的时候,出现端口和地址正在被占用,不知道该如何解决这个问题,就是这样