Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Form modal deja que el form llamante tome el foco (https://www.clubdelphi.com/foros/showthread.php?t=29897)

tata 03-02-2006 14:33:11

Form modal deja que el form llamante tome el foco
 
Desde una form fsnormal que abro con ShowModal (ventana llamante) abro otro form fsnormal también con ShowModal (ventana llamada).
Pues bien, en un equipo con Windows XP soy capaz de provocar (a base de hacer clics con el ratón sobre la ventana primera intentando repoducir lo que el usuario debe hacer cuando ve que tarda en salir la ventana que espera) que la ventana llamante se quede con el foco y la ventana llamada se quede detrás. Tras esto puedo acceder a las dos ventanas de la misma aplicación, esto es, la ventana llamada no se comporta como modal.

¿Cómo es posible que la ventana llamada no se acuerde que es modal y permita esto?. ¿Dónde está fallando la gestión de ventanas?.

Gracias

dec 03-02-2006 18:12:51

Hola,

Lo que dices, creo yo, se entendería mejor con algo de código. ¿Puedes proporcionar un ejemplo "funcional"?

josemmerida 16-05-2006 18:55:41

...y a mi...
 
Anda, pues a mi tambien me pasa.......

Vamos a ver (solo he reproducido este problema en winXP, en w2000 y en w9? nunca me ha pasado):

En la ventana principal hago

TapplicationCreateform(TventanaModal,VentanaModal);
Ventanamodal.Showmodal;
Ventanamodal.free;

Envidentemente, al hacer showmodal la ventana modal debe quedarse en primer plano, y no se debe poder acceder al la ventana principal.

Pues no(solo algunas veces:confused: ). La ventana modal queda detras de la ventana principal, pero solo se dibuja detras, porque efectivamente no tienes acceso a esta. Si picas con el raton en la modal se redibuja en primer plano y ya esta.....pero, si la modal es mas pequeña que la principal:eek: , no se puede tocar y al usuario le da la impresion de que el programa esta colgado.

Esta situacion ha empezado a preocuparme, pues vamos a migrar todos los equipos a wxp.

Socorro............

Y Saludos.

noshy 16-05-2006 20:04:46

A mi tambien me a pasado pero solamente en WinXP nunca en 98 ni en 2000. pero a mi me pasa con los showmessage(), das algun mensaje de error cion esta funcion y a veces en ves de permanecer en el foco se va atras de la ventana principal y queda todo colgado. Error de Windows XP?? lo mas probable.

Lepe 16-05-2006 20:35:05

Cita:

Empezado por Api de Windows

SetForegroundWindow

The foreground window is the window at the top of the Z order. It is the window that the user is working with. In a preemptive multitasking environment, you should generally let the user control which window is the foreground window. However, an application can call SetForegroundWindow if it wants to put itself into the foreground to display a critical error or information that requires the user's immediate attention. A good example is a debugger when it hits a breakpoint.

Código Delphi [-]
  applicationCreateform(TventanaModal,VentanaModal);
  SetForegroundWindow(Application.Handle);
  Application.ProcessMessages;
  Ventanamodal.Showmodal;
  Ventanamodal.free;

Saludos.

josemmerida 17-05-2006 10:16:03

...el que sabe sabe....
 
...el que sabe, sabe....;)

Gracias lo probaré.

Sick boy 17-05-2006 11:51:37

Me preocupa mucho este tipo de problema, pero no soy capaz de reproducirlo.

Tambien puede pasar con los Showmessage???

Código:

  SetForegroundWindow(Application.Handle);
  Application.ProcessMessages;

Habria que hacer esto cada vez que llames a una ventana modal o un showmessage??

Y con los InputQuery, dialogs, etc....

Cita:

Pues no(solo algunas veces ). La ventana modal queda detras de la ventana principal, pero solo se dibuja detras, porque efectivamente no tienes acceso a esta. Si picas con el raton en la modal se redibuja en primer plano y ya esta.....pero, si la modal es mas pequeña que la principal , no se puede tocar y al usuario le da la impresion de que el programa esta colgado.
Me rectifico, releyendo el texto de josemmerida recuerdo que tengo una aplicación donde sucede esto, y nunca supe por qué. Como la aplicación es para uso interno y solo la utilizo yo, no me preocupa. Ademas, por si os sirve de algo, si utilizo ALT+TAB para volver a la aplicación, SI QUE VEO LA VENTANA MODAL ¿?¿?¿? y el programa continua funcionando.

Lo extraño es que esa ventana modal la utilizo en una aplicación que nunca ha tenido problemas.
La diferencia entre la que da problemas y la que no es que la que no da problemas es MDI.
En ambas aplicaciones la ventana es fsNormal, y se autocrea al iniciarse el programa. No libero la ventana al terminar (pues me interesa no destruirla).

NOTA: La llamada desde la MDI se hace desde una ventana fsChild
Intuyo que el problema ocurre cuando una ventana fsNormal llama a otra fsNormal como modal. ¿Qué opinais??

En cualquier caso, grave, bastante grave el problema.


La franja horaria es GMT +2. Ahora son las 14:55:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi