2011-10-10 17 views
7

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

14

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.

+0

Excelente @Remy Lebeau. No pensé en usar el archivo de proyecto. –

+1

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

7

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).

+0

Gracias Misha. Voy a probar eso también. –

Cuestiones relacionadas