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
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.
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).
Merci Misha. Je vais essayer ça aussi. –
- 1. ASIHTTPRequest commence mais ne se termine jamais
- 2. Validez le formulaire avant que doPost() ne soit appelé?
- 3. Jquery resizabe événement ne se termine pas
- 4. Déclencher un événement secondes avant que la vidéo se termine dans flowplayer?
- 5. ASP.net: ClientScript.RegisterClientScriptBlock se déclenche avant que jQuery ne soit chargé
- 6. Mon application ne se termine pas
- 7. .load() se déclenche avant que l'image ne soit prête
- 8. Formulaire de demande ne se termine pas
- 9. Attendez que le bloc d'animation se termine avant de commencer
- 10. C#: Notification avant que WeakReference ne soit collecté?
- 11. comment savoir lorsqu'une application externe se termine par Delphi
- 12. Le programme se bloque dans le débogueur avant que quoi que ce soit se produit
- 13. Ajoutez un événement form.submit pour vous assurer que la publication a lieu avant que le formulaire ne soit envoyé.
- 14. Pourquoi l'animation ne se termine pas avant le rappel
- 15. Attendez que CLLocationManager se termine avant de tweeter
- 16. Comment attendre que HTTP async se termine avant de continuer?
- 17. Est-il nécessaire que quelqu'un soit inscrit à un événement avant de pouvoir le faire?
- 18. Est-il nécessaire d'appeler la méthode servicehost.close avant que l'application hôte ne se termine?
- 19. CCSequence n'attend pas que l'action se termine avant que le prochain ne commence
- 20. XMLHttpRequest est timeout avant que la réponse ne soit arrivée
- 21. Est-ce sûr de se désabonner DoWork après avoir appelé RunWorkerAsync mais avant que la fonction se termine?
- 22. JTextPane a la valeur suivante avant que la méthode keyReleased ne se termine
- 23. Attendre que la fonction se termine avant de redémarrer
- 24. Ne veut pas que le formulaire soit réduit
- 25. La méthode onDestroy d'Android Service appelée avant que le balayage Bluetooth se termine
- 26. Est-il possible d'afficher quelque chose avant que l'activité principale se termine onCreate() dans Android?
- 27. css() ne se termine pas avant instruction suivante dans Safari
- 28. Ajax timeout mais le côté serveur ne se termine pas
- 29. Dans Rails 3, existe-t-il un événement qui se déclenche avant que la chaîne de connexion ne soit définie?
- 30. Mise à jour d'un formulaire après que l'événement se soit produit dans un autre formulaire
Excellent @Remy Lebeau. Je n'ai pas pensé à utiliser le fichier de projet. –
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