2011-10-10 2 views
7

J'utilise Delphi 6 Pro. J'ai besoin d'un événement qui se déclenchera lorsque mon application sera définitivement arrêtée mais avant que tous les formulaires ne soient détruits. J'ai pensé à piéger les messages WM_QUIT dans le formulaire principal WndProc() mais cela n'a pas fonctionné parce que les formulaires ont commencé à détruire avant d'avoir vu un message WM_QUIT. Je me demandais s'il existe un événement Delphi standard que je peux utiliser pour exécuter du code à ce stade de la chaîne d'arrêt des événements? Je ne peux pas utiliser l'événement FormClose() du formulaire principal car il n'est pas garanti de se déclencher et l'événement FormDestroy() est trop tard. Des idées?Existe-t-il un événement Delphi dont l'appel est garanti lorsqu'une application se termine mais avant que tout formulaire ne soit détruit?

Répondre

14

Vous ne verrez pas un WM_QUIT messsage arrive dans la méthode WndProc(), comme WM_QUIT est un signal pour le message des boucles d'arrêter de courir, et en tant que tel, il est généralement pas envoyé à une procédure de fenêtre.

Il n'y a aucun événement spécifique pour ce que vous demandez. Cependant, vous pouvez ouvrir le fichier .dpr de votre projet et mettre le code dont vous avez besoin après l'appel à Application.Run. La boucle de message n'est plus en cours d'exécution, mais les objets Application et MainForm n'ont pas encore été libérés.

+0

Excellent @Remy Lebeau. Je n'ai pas pensé à utiliser le fichier de projet. –

+1

Le seul problème avec ceci est que, après que Application.Run a fini, tout s'est effectivement arrêté et seules les sections de finalisation sont laissées en fonctionnement. C'est très tard dans la pièce - trop tard pour faire un travail efficace. – Misha

7

La meilleure façon de le faire (et j'ai passé beaucoup de temps à le regarder au fil des ans) est de connecter une procédure via la routine AddTerminateProc() dans SysUtils.pas. Cela fonctionne à chaque fois et je l'utilise depuis des années (sauf si vous tuez le processus via le gestionnaire de tâches).

+0

Merci Misha. Je vais essayer ça aussi. –

Questions connexes