I am using Delphi 6 Pro. I need an event that will fire when my application is definitely shutting down but before any Forms are destroyed. I thought about trapping WM_QUIT messages in the main form WndProc() but that didn't work because the Forms started destroying before I saw a WM_QUIT message. I was wondering if there is a standard Delphi event that I can use to execute code at this point of the shutdown chain of events? I can't use the main form's FormClose() event since it isn't guaranteed to fire, and the FormDestroy() event is too late. Any ideas?
Asked
Active
Viewed 2,989 times
2 Answers
14
You will not see a WM_QUIT
messsage arrive in the WndProc()
method, as WM_QUIT
is a signal for message loops to stop running, and as such it is not usually dispatched to a window procedure.
There is no specific event for what you are asking. What you can do, however, is open your project's .dpr file and put whatever code you need after the call to Application.Run
exits. The message loop is no longer running, but the Application
and MainForm
objects have not been freed yet.

Remy Lebeau
- 555,201
- 31
- 458
- 770
-
Excellent @Remy Lebeau. I didn't think of using the project file. – Robert Oschler Oct 11 '11 at 00:52
-
1The only problem with this is that after Application.Run has finished everything has effectively closed down and only the finalisation sections are left to run. This is very late in the piece - too late to do any effective work. – Misha Oct 11 '11 at 07:22
9
The best way to do this (and I have spent a long time looking at this over the years) is to hook up a procedure via the AddTerminateProc() routine in SysUtils.pas. This works every time and I have been using it for years (unless you kill the process via the task manager).

Misha
- 1,816
- 1
- 13
- 16