Sto usando Delphi 6 Pro. Ho bisogno di un evento che sparerà quando la mia applicazione si spegnerà definitivamente ma prima che tutti i moduli vengano distrutti. Ho pensato di intrappolare i messaggi WM_QUIT nel modulo principale WndProc(), ma questo non ha funzionato perché i moduli hanno iniziato a distruggere prima di vedere un messaggio WM_QUIT. Mi chiedevo se esiste un evento Delphi standard che posso utilizzare per eseguire codice a questo punto della catena di eventi di shutdown? Non è possibile utilizzare l'evento FormClose() della maschera principale poiché non è garantito l'attivazione e l'evento FormDestroy() è troppo tardi. Qualche idea?Esiste un evento Delphi che è garantito per essere chiamato quando un'app termina ma prima che tutti i moduli vengano distrutti?
risposta
Non vedrete un messsage WM_QUIT
arrivano nel metodo WndProc()
, come WM_QUIT
è un segnale per il loop di messaggi per interrompere l'esecuzione, e come tale non è di solito spedito ad una routine di finestra.
Non c'è un evento specifico per quello che stai chiedendo. Quello che puoi fare, tuttavia, è aprire il file .dpr del tuo progetto e inserire il codice che ti serve dopo la chiamata alle uscite Application.Run
. Il ciclo dei messaggi non è più in esecuzione, ma gli oggetti Application
e MainForm
non sono ancora stati liberati.
Il modo migliore per farlo (e ho passato molto tempo a guardarlo nel corso degli anni) è collegare una procedura tramite la routine AddTerminateProc() in SysUtils.pas. Funziona sempre e lo uso da anni (a meno che non si uccida il processo tramite il task manager).
Grazie Misha. Lo farò anche io. –
- 1. Esiste un modo per eseguire i moduli RequireJS prima che tutti gli elementi vengano caricati?
- 2. È garantito dallo standard C++ che cin, cout, ecc. Verranno creati prima e distrutti per ultimi?
- 3. I gestori di eventi sono garantiti per il completamento prima che vengano richiamati i callback AJAX?
- 4. Devo scrivere test prima che vengano compilati?
- 5. Esiste una libreria Delphi che restituisce tutti i percorsi di origine efficaci per un progetto?
- 6. Django: Rimuovi messaggio prima che vengano visualizzati
- 7. C'è qualche evento che si attiva quando termina l'animazione WPF?
- 8. Evento quando tutti i moduli mdi sono chiusi
- 9. Modificare i dati del modulo Django prima che vengano elaborati
- 10. Obfuscating assembly prima che vengano integrati nell'MSI
- 11. Fare in modo che tutti i moduli del progetto padre maven testano tutti i moduli prima di distribuirli.
- 12. Come fare a Delphi per ri-salvare tutti i moduli?
- 13. Può essere chiamato dopo che un costruttore ha generato un'eccezione?
- 14. Variabile di classe Delphi che esce dall'ambito prima che il distruttore di classe venga chiamato
- 15. È possibile trovare tutti i moduli che implementano determinati protocolli?
- 16. Assicurarsi che i file vengano chiusi prontamente
- 17. Qt: aggiorna i widget che sono nascosti prima che vengano mostrati?
- 18. viewDidLoad chiamato prima di prepareForSegue termina
- 19. È std :: cout garantito per essere inizializzato?
- 20. È garantito che mclapply restituisca i suoi risultati in ordine?
- 21. In Delphi c'è un modo per vedere tutti i riferimenti e collegamenti a un componente?
- 22. Come garantire che i messaggi vengano consegnati?
- 23. È kernel/sched.c/context_switch() garantito per essere invocato ogni volta che viene avviato un processo?
- 24. Delphi DllMain DLL_PROCESS_DETACH chiamato prima DLL_PROCESS_ATTACH
- 25. MD5 è garantito per essere disponibile con MessageDigest in Android?
- 26. È necessario che NLog svuota tutti i messaggi in coda in AsyncTargetWrapper quando viene chiamato Flush()?
- 27. Esiste un metodo generico foreach in Delphi per che può essere chiamata con funzione anonima
- 28. Delphi: Impedisci che i nomi dei metodi vengano visualizzati nei file eseguibili
- 29. onSaveInstanceState/onPause - attendere che lo stato è completamente salvato prima di processo che permette di essere ucciso
- 30. JS angolare che genera PDF - tutti i moduli creatore-creatore?
Eccellente @Remy Lebeau. Non pensavo di usare il file di progetto. –
L'unico problema con questo è che dopo Application.Run ha terminato tutto ha effettivamente chiuso e solo le sezioni di finalizzazione sono lasciati a correre. Questo è molto tardi nel pezzo - troppo tardi per fare qualsiasi lavoro efficace. – Misha