| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 15 May, 2004 2:34 pm Asunto: Evitar OnCloseQuery |
|
|
Tengo la aplicación minimizada en el tray de windows junto al reloj, y en el evento OncloseQuery de la misma tengo un mensaje que pide al usuario confirmación para cerrar. El problema viene cuando el usuario apaga o reinicia windows ya que antes de producirse el cierre o reinicio salta el onclosequery del programa mostrando el mensaje que pide confirmación de cierre y eso impide que windos cierre o reinicie. Me gustaría que cuando la aplicación se cierra manualmente SI muestre el mensaje de confirmación (esto ya lo hace), pero que cuando el programa esté minimizado en el tray y se cierre windows NO salte el mensaje de confirmación. ¿alguna idea? _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 15 May, 2004 8:03 pm Asunto: |
|
|
Gracias por el enlace _LEO , he pillado mas o menos la idea pero no se como aplicar el código, te explico lo ke he hecho:
En la parte private de la clase del Form principal:
void __fastcall WMEndSession(TWMEndSession &Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_ENDSESSION, TWMEndSession, WMEndSession)
END_MESSAGE_MAP(TForm)
en el .CCP:
void __fastcall TForm1::WMEndSession(TWMEndSession &Msg)
{
cierra_windows = true; //variable global iniciada en false
}
y en el OncloseQuery:
if (cierra_windows == false){
if (Application->MessageBoxA("¿Estás seguro de querer salir de CanviFondos?","¿Seguro?",MB_YESNO|MB_ICONQUESTION)==IDNO){
CanClose = false;
}
}
Cuando reinicio windows me sigue saliendo el mensaje de confirmación de cierre de la aplicación.  _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 15 May, 2004 8:24 pm Asunto: |
|
|
Disculpa, tienes razón, no lo probé antes.
Cambia el mensaje WM_ENDSESSION por WM_QUERYENDSESSION.
Y añade la siguiente línea a tu método WmEndSession:
| Código: | void __fastcall TForm1::WMEndSession(TWMEndSession &Msg)
{
cierra_windows = true; //variable global iniciada en false
Msg.Result = true; // <----
} |
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 15 May, 2004 9:39 pm Asunto: |
|
|
P.E.R.F.E.C.T.O _Leo , Una vez mas tus repuestas son garantía de éxito. Por cierto, muy interesante eso de la interceptación de los mensajes de windows. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Dom 20 Jun, 2004 5:32 pm Asunto: |
|
|
Perdona que te moleste más _Leo . Pero resulta que el código al principio iba de maravilla, he continuado con el desarrollo de la aplicación y ahora resulta que no funciona. El fallo consiste en que Windows no se apaga ni reinicia . Al pulsar el botón Inicio -> Apagar parece que la aplicación se cierra ya que desaparece del tray pero el sistema sigue encendido, pulsando la combinación CTRL+ALT+SUPR pude ver la lista de procesos en funcionamiento en la cual he visto sorprendido como mi aplicación sigue estando ahí. O sea que al intentar cerrar o reiniciar el sistema quita la aplicación de la bandeja del sistema pero la sigue ejecutando en segundo plano y parece ser que eso impide el cierre o reinicio. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 20 Jun, 2004 6:47 pm Asunto: |
|
|
No es molestia... no creo que sea de este código ya que es el método que utilizan todo este tipo de programas. Si tu código no es privado y quieres que le eche un vistazo no tengo inconveniente, ya que sin ver nada es muy difícil saber que puede estar pasando:
leosoft ARROBA telefonica PUNTO net |
|
| Volver arriba |
|
 |
|