Estoy usando Delphi 6 Pro. Necesito un evento que se activará cuando mi aplicación se cierre definitivamente, pero antes de que se destruyan las Formas. Pensé en atrapar mensajes WM_QUIT en el formulario principal WndProc() pero eso no funcionó porque los formularios comenzaron a destruir antes de ver un mensaje WM_QUIT. Me preguntaba si existe un evento Delphi estándar que pueda usar para ejecutar código en este punto de la cadena de eventos de cierre. No puedo usar el evento FormClose() del formulario principal, ya que no está garantizado que se active y el evento FormDestroy() es demasiado tarde. ¿Algunas ideas?¿Hay algún evento Delphi que garantice que se llame cuando finaliza una aplicación pero antes de que se destruyan?
Respuesta
No verá de mensajes con WM_QUIT
llegan en el método WndProc()
, como WM_QUIT
es una señal para los bucles de mensajes para detener la ejecución, y como tal no se envían generalmente a un procedimiento de ventana.
No hay eventos específicos para lo que está preguntando. Lo que puede hacer, sin embargo, es abrir el archivo .dpr de su proyecto y colocar el código que necesite después de la llamada a Application.Run
. El bucle de mensaje ya no se está ejecutando, pero los objetos Application
y MainForm
no se han liberado aún.
La mejor manera de hacerlo (y he pasado mucho tiempo mirando esto a lo largo de los años) es conectar un procedimiento a través de la rutina AddTerminateProc() en SysUtils.pas. Esto funciona todo el tiempo y lo he usado durante años (a menos que elimines el proceso a través del administrador de tareas).
Gracias Misha. Voy a probar eso también. –
- 1. Evitar que se llame a un método antes que otro
- 2. ¿Hay algún evento en Delphi que se active cuando ActiveControl cambie?
- 3. ¿Hay un método UIViewController que se llame automáticamente cuando la aplicación se mueve al fondo?
- 4. ¿Hay algún evento que se active cada vez que haya una excepción?
- 5. ¿Hay algún método en appDelegate que se invoca cuando falla la aplicación?
- 6. ¿Hay algún evento que se desactive cuando termine la animación WPF?
- 7. Cómo escribir una función node.js que espera a que un evento se active antes de 'regresar'?
- 8. ¿Qué causa realmente que se llame a Session_Start?
- 9. JPA @Se han borrado los campos de acceso antes de que se llame al método @PreUpdate
- 10. ¿Hay algún truco para prohibir que se llame macro C como valor a la izquierda?
- 11. ¿Hay un evento que se activa cuando se ha establecido un enlace en una propiedad?
- 12. Evento de Javascript que se ejecuta antes de que la página cambie
- 13. Parece que Delphi está destruyendo objetos antes de que sea
- 14. Función de iOS que se debe llamar una vez (cuando se inicializa la aplicación)
- 15. ASP.net: ClientScript.RegisterClientScriptBlock se dispara antes de que se cargue jQuery
- 16. ¿Hay un evento que se dispara cuando DOM se modifica en MSHTML IE8?
- 17. ¿Qué función se invoca cuando finaliza la aplicación de iPhone?
- 18. Evento ASP.Net Session_Start que no se activa
- 19. La captura de una aplicación Python antes de que salga
- 20. Cómo detener la devolución de un thread antes de que Join() se llame
- 21. Evento que se dispara antes (¡no después!) Los elementos DOM se desplazan en javascript
- 22. Cómo evitar antes de que se llame al hacer clic en el botón Enviar
- 23. Evento JQuery que se activará cuando se seleccione un menú desplegable, pero el valor no se cambia
- 24. Aplicación que causa que el teléfono se caliente
- 25. Evitar que el evento click se active cuando se activa el evento dblclick
- 26. Ejecutar código antes de que se ejecute la función llamada
- 27. ¿Cuándo descartaría el método para que no se le llame?
- 28. p: ajax getter para que la actualización se llame antes del oyente
- 29. Hay una manera en .NET de llamar automáticamente a un método después de que se haya invocado otro método, pero antes de que se haya ingresado
- 30. constructor de copia no se llama, pero el compilador se queja de que no hay
Excelente @Remy Lebeau. No pensé en usar el archivo de proyecto. –
El único problema con esto es que después de que Application.Run haya finalizado, todo se ha cerrado de manera efectiva y solo se dejan ejecutar las secciones de finalización. Esto es muy tarde en la obra, demasiado tarde para hacer un trabajo efectivo. – Misha