Estoy haciendo una aplicación en Delphi y quiero que cuando se pulse un determinado botón, se muestre un dialogo que sea siempre visible desde cualquier otra aplicación. Es decir, que este siempre en primer plano, independientemente de la aplicación que se este viendo. Algo parecido al administrador de tareas de windows ¿Cómo puede hacerlo?
1 respuesta
Respuesta de gaunmanuel
2
2
gaunmanuel, Desarrollador de sistemas, delphi, SQL Interbase, Oracle
Bueno mira la form tiene una propiedad llamada FormStyle ahí tienes varias opciones entre ellas esta fsStayOnTop esta propiedad te permite hacer lo que deseas...
He probado con esa propiedad, pero lo único que consigo es que el formulario este siempre en primer plano de la aplicación que lo lanza. Pero cuando visualizo otra aplicación este formulario se oculta. ¿Alguna idea?
Ah ok, bueno el stayOnTop funciona solo para la forma principal, si tu se lo pones a la forma principal aunque abras word o excel esta siempre estará encima, pero por supuesto el stayonTop no funciona para segundas forms, pero ahí te va el truco espero te funcione... Es bastante frustrante a veces ver como al poner el FormStyle de una form a fsStayOnTop, ésta pase de nosotros miserablemente, ocultándose tras cualquier otra ventana. Si creamos una aplicación de cero, con una form, y ponemos su propiedad FormStyle a fsStayOnTop...¡Tachan! La form permanecerá por encima de cualquier programa que tengamos abierto... ahora bien ¿dónde está la pega?... La pega está en que si la form no es la form principal de la aplicación, para nuestra desgracia, ésta no hace caso del StayOnTop... pero tranquilo, que para eso tenemos este truco... # El escenario está claro, por ejemplo, crea una aplicacion con dos forms, Form1 y Form2 y a la propiedad FormStyle de la form2 dale el valor fsStayOnTop. # Ahora pon un boton en la form1, y dentro del OnCLick del boton pon este código: procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; Hide; end; Compila y ejecuta el proyecto, dale al Button1 y verás que aparece la form2, pero como podrás comprobar... de StayOnTop no tiene nada... se oculta ante cualquier otra aplicación... Bien, vamos a arreglar esto... usaremos una variación del truco: [375] - Forms estilo 'StayDown' Salvo que en este caso, forzaremos a la form a permanecer siempre en primer plano, en lugar de en ultimo plano... Así que, ponemos esta linea en el private de la Form2: procedure Chivato(var m: TWMWINDOWPOSCHANGED); message WM_WindowPosChanging; y su implementación correspondiente dentro de la parte implementation de la form: procedure TForm1.Chivato(var m: TWMWINDOWPOSCHANGED); begin m.WindowPos.hwndInsertAfter:=HWND_TOP; end; Y voila! Ya está hecho.
1 comentario
Muy bueno el aporte lo hice y me funciono pero creo que cometiste un errorcito pegando el código, procedure TForm1.Chivato(var m: TWMWINDOWPOSCHANGED); debe ser procedure TForm2. Chivato(var m: TWMWINDOWPOSCHANGED);procedure TForm1. Chivato(var m: TWMWINDOWPOSCHANGED); así me funciono al tiro con un login que hice. - Brahian Antonio Peña Nuñez
Muy bueno el aporte lo hice y me funciono pero creo que cometiste un errorcito pegando el código, procedure TForm1.Chivato(var m: TWMWINDOWPOSCHANGED); debe ser procedure TForm2. Chivato(var m: TWMWINDOWPOSCHANGED);procedure TForm1. Chivato(var m: TWMWINDOWPOSCHANGED); así me funciono al tiro con un login que hice. - Brahian Antonio Peña Nuñez