![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
![]() Estimados colegas,
Tengo un problema con el apagado del sistema y la aplicación que desarrollo. Lo que me gustaría conseguir es que cuando apaguen el sistema (esto es, CERRAR SESION, APAGAR EL SISTEMA o REINICIAR) mi aplicación se cerrara automáticamente. He aplicado dos soluciones descritas en este foro. Una la de Roman (http://www.clubdelphi.com/foros/show...60&postcount=2) redefiniendo los mensajes de este modo:
y también he probado con la solución descrita aquí: http://www.delphifaq.com/faq/delphi/vcl/f285.shtml Con las dos alternativas consigo lo mismo... Efectivamente mi aplicación se cierra correctamente. El problema es que por algún motivo, detiene el apagado de Windows que se ha solicitado, y por tanto el ordenador continua encendido (aunque con mi aplicación cerrada). ¿Alguien podría darme alguna orientación al respecto? Muchas gracias por adelantado. Última edición por dec fecha: 08-11-2006 a las 23:51:42. |
#2
|
||||
|
||||
Saludos
Tienes algun codigo en el evento OnCloseQuery del formulario Principal?
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#3
|
||||
|
||||
Hola vtdeleon,
Pues no, no tengo onCloseQuery en el formulario principal... Tampoco OnClose... ![]() |
#4
|
||||
|
||||
Tal como lo pintas, sobre todo no teniendo nada en el evento OnCloseQuery, no veo razón alguna para que se detenga el apagado de Windows. Quizá alguna componente que tengas en tu aplicación. Creo recordar que alguna componente de tipo TrayIcon ocasionaba esto.
// Saludos |
#5
|
||||
|
||||
Hola Roman...
Mi aplicación utiliza como componente para el TrayIcon el famoso RX (desconozco si se detectó algún problema al respecto). Aparte de ese no utilizo ninguno otro, aunque sí utilizo comunicaciones serie mediante una librería (no componente visual). Esta noche se me ocurrió una posible alternativa, pero no sé si es viable... Consistiría en detectar el tipo de "apagado" que han solicitado (cerrar sesión, apagar, reiniciar) y resolicitarlo yo en mi aplicación justo antes de cerrarla (mediante un "shutdown" por ejemplo). ¿Qué os parece? Sinceramente no es lo más elegante, pero no se me ocurre nada más... :/ Muchas gracias a todos... |
#6
|
||||
|
||||
por si acaso te sirve de algo puedes echar un vistazo al truco 464 de trucomanía.
|
#7
|
||||
|
||||
Saludos
MDSato, trata de usar las Etiquetas vB :=Delphi-SQL Cambie tu post anterior para que veas el cambio y lo legible que es ahora ![]()
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#8
|
||||
|
||||
Glups... Pues sí... Perdón por la novatada...
![]() |
#9
|
||||
|
||||
Hola,
Me da la impresión de que aquí hay una confusión sobre el objetivo a realizar. La primera pregunta sería: ¿para qué quieres manejar los mensajes WM_QUERYENDSESSION y WM_ENDSESSION? Al parecer, la respuesta la das desde el primer mensaje: Cita:
Normalmente estos mensajes sólo los requieres para asegurarte que tu aplicación haga las rutinas de limpieza necesarias antes de terminar. Pero la más de las veces bastará con usar los eventos OnCloseQuery y OnClose del formulario principal. De las pocas situaciones en que es necesario usar directamente los mensajes de Windows, es cuando necesitamos distinguir si el evento OnCloseQuery se genera bien porque simplemente alguien cierre la aplicación o bien porque se cierre la sesión de Windows. Y es así porque la VCL no considera esta situación. Pero si como dijiste: Cita:
Además, estos mensajes son para avisarte que tu aplicación se va a cerrar, mas no para avisarte que cierres tu aplicación. ¿Ves la diferencia? Así que usar Close, Halt o ExitWindowsEx no tendría porque ser necesario. Dado que no haces rutinas de limpieza en el evento OnClose ni requieres el uso de OnCloseQuery, me da la impresión de que todo este hilo se originó porque por alguna razón tu aplicación estaba impidiendo que se cerrara la sesión de Windows. La razón habría que buscarla, en lugar de andar "cuchareando" a ver con qué comando se arregla. Si la razón está en el RxTrayIcon entonces quizá baste con desactivarlo en el evento OnClose. // Saludos |
#10
|
||||
|
||||
mismo problema
Hola MDSato, tengo el mismo problema y uso tambien el componente TrayIcon. Intente usar los procedimientos que mencionas pero no se exactamente como implementarlos, por el momento los tengo declarados en el TForm pero de ahi como sigue? Gracias.
|
![]() |
|
|
![]() |
|