PDA

Ver la Versión Completa : Combobox se queda por debajo del Form


ElDioni
18-06-2014, 11:06:48
Buenos días a todos,

tengo un problema con un Combobox o con la forma en que estoy trabajando, les pongo en situación, tengo un programa de mensajería interna que cuando muestra un mensaje, se pone delante de todas las aplicaciones abiertas con la propiedad FormStyle:=FsStayOnTop. Ocurría en algunas ocasiones que el Form daba como un fogonazo y se quedaba detrás y no delante (cuando el usuario estaba usando otra aplicación), entonces puse un timer dentro del formulario para que cada 2 segundos volviera a llevar el formulario al frente. Lo que ocurre es que en el formulario tengo un combobox que al desplegarse se muestra pero que, en cuanto el formulario vuelve a ponerse en FsStayOnTop, la lista desplegada del combo queda oculta por el form y hay que volver a pulsar el desplegable para ver la consulta, he intentado repintarlo pero solo repinta el combo (que no se oculta nunca) pero no la lista desplegada.

Alguien se le ocurre como arreglarlo.

Gracias de antemano.

Saludos.

dec
18-06-2014, 14:04:35
Hola,

Tal vez el "Timer" no sea una buena idea. Incluso viniendo de ti. :) Al menos deberías controlar que el "Timer" no se ejecute una vez el usuario "esté" en el formulario. Pero como ves aquí pueden empezar más problemas. Por eso el "Timer" puede no ser una buena idea. Prueba con un método del formulario como "BringToFront" (http://docwiki.embarcadero.com/CodeExamples/XE6/en/BringToFront_%28Delphi%29) además del "style on top". Mira a ver primero sin usar esto último, sólo con el "BrigToFront". A lo mejor otro compañero también puede echarte una mano. Yo sólo venía a decir que el "Timer" no me parece una buena idea y que incluso puede ser el culpable de la "ocultación" de la lista...

ElDioni
18-06-2014, 16:27:20
Hola dec,

yo entendía que el bringtofront solo era para traer componentes al frente pero dentro de la misma aplicación, y lo que quiero es que se quede encima de todas las aplicaciones que se estén ejecutando en ese momento, de todas formas lo he probado y no funciona, ya suponía que el timer no es la mejor opción y es el que, al volver a poner el form on top, me deja detrás la lista desplegada del combo, solo la lista desplegada, no el combo en si, lo se porque si despliego la lista y una parte de ella queda fuera del formulario solo se tapa la parte que queda dentro del formulario y el resto se sigue viendo por detrás.
En su día me di cuenta de que si la aplicación la ejecuto en local el form no fallaba y siempre se iba al frente, pero que al estar en red si que se queda en alguna ocasión por detrás de la aplicación activa. Por eso he puesto el timer, para refrescar el FsStayOnTop.
Si se te ocurre algo más quedo a la espera.

Gracias por tu tiempo y tu respuesta.

Saludos.

ElDioni
18-06-2014, 16:29:59
Hola de nuevo,

¿existe alguna forma de saber si mi programa es el que está encima de todos los programas?, como windows sabe que programa es el que está activo en ese momento pues preguntarle cual es.

Saludos.

dec
18-06-2014, 16:32:11
Hola,

El propio formulario cuenta con un método "BrigToFront", pero ignoro si servirá o no de algo en tu caso. Respecto del "Timer"... prueba a no poner "on top" el formulario si este ya se encuetra "on top". Igual lo que dices de que se trata de una aplicación "en red" tenga algo que ver también. Prueba otra forma de avisar al usuario: había alguna función por ahí a modo de indicador para el icono de la aplicación en la barra de tareas, haciéndolo "parpadear"... para avisar al usuario. O bien otra forma de avisarlo como un "globo" en la bandeja del sistema o algo así. Yo probaría primero que nada a no estar ejecutando el "on top" en el "Timer" a cada intervalo del mismo...

ElDioni
18-06-2014, 17:30:23
Hola David,

en un principio se hacía parpadear la barra de herramientas, lo hacía la propia aplicación cuando se restauraba ya que la aplicación se encuentra en el area de notificaciones, pero no se enteraban de nada. tengo comprobado que, en mi empresa, o les das con los avisos en los morros o no los ven. Por eso te preguntaba de si hay alguna opción de saber si la aplicación ya está OnTop, es decir, está por encima de las demas, por lo menos haría la comprobación en el timer y no tendría que estar poniendolo en OnTop todo el rato.

Saludos.

dec
18-06-2014, 18:07:56
Hola,

Yo me refiero sólo a comprobar que "FormStyle <> fsStayOnTop". Es decir, a poner "on top" el formulario una sóla vez, para tratar de evitar el problema.

newtron
19-06-2014, 10:17:03
Hola.

Aunque no es el mismo asunto que comentas hace algún tiempo me estuve peleando con la posición de los formularios y en este (http://www.clubdelphi.com/foros/showthread.php?t=76372) hilo con la ayuda de los colegas conseguí darle una solución. Si quieres echale un vistazo por si te sirve de algo.

Saludos

ElDioni
19-06-2014, 10:58:11
Hola, lo primero gracias por su tiempo.

He probado la opción que venía en el hilo que me comentabas newtron pero no se si lo he hecho mal porque el formulario se queda detrás de otras aplicaciones y yo lo que quiero es que siempre esté delante de todo.

David, cuando yo mostraba el mensaje correspondiente el formulario lo ponía con FsStayOnTop, no tenía timer, pero había veces que no aparecía On Top por lo que el tiparraco de turno no se enteraba de que le había llegado mensaje alguno, por eso el otro día le añadí el timer, para que, aunque ya estaba On Top, lo volviera a poner On Top, así conseguía que se quedara siempre encima de las demás aplicaciones, sino lo hago así aunque este puesto FsStayOnTop, en cuanto pulso otra aplicación se va hacia atrás.

Al final lo he resulto desactivando el timer cuando hago del dropdown del combo y volviendolo a activar cuando hago click en uno de los items. De esta forma no me vuelve a traer al frente el formulario cuando estoy seleccionando una opción del combo y no tapa la lista desplegada.

Gracias de nuevo a los dos.

Saludos.

dec
19-06-2014, 11:03:59
Hola,

Me alegro de que dieras con una solución. :)

newtron
19-06-2014, 13:57:59
Hola, lo primero gracias por su tiempo.

He probado la opción que venía en el hilo que me comentabas newtron pero no se si lo he hecho mal porque el formulario se queda detrás de otras aplicaciones y yo lo que quiero es que siempre esté delante de todo.


Claro... eso es lo que yo quería pero igual que en mi caso se queda detrás de todos imagino que cambiando algún parámetro se quedará al frente de todo, por eso imaginaba que podría servirte. Pero nada, si lo has solucionado estupendo.