FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
No se como llamar a esto... ventana usando overlay o algo asi
De acuerdo, he estado buscando arduamente por todos lados y no he encontrado nada sobr eel tema. Quisiera hacer una pequeña aplicación que mostrase una ventana semitransparente. Hasta ahi facil y sencillo. Sin embargo quisiera que esta ventana no pudiera obtener el foco.
Es para una aplicacion que mostrará una informacion, y poniendola StayOnTop en la parte superior derecha de la pantalla, al pulsar en el boton de cerrar que se ignore que está ahi esa ventana. No se si me explico correctamente. He visto por ahi que se puede hacer con el método Overlay de DirectX. Alguien me podria guiar??? E simportante, me dará mucho control en mi trabajo. Gracias por vuestra ayuda. |
#2
|
||||
|
||||
Hola,
Me pregunto si no bastaría conque la ventana en cuestión, el formulario, no contara con el botón "cerrar". Eso puedes conseguirlo a partir de la propiedad "BorderStyle" del formulario. Si quieres reaccionar al cierre del formulario, en todo caso (por ejemplo para la combinación de teclas ALT + F4 sobre el mismo) puedes acaso usar el evento "OnCloseQuery" y actuar en consecuencia. De todas maneras el botón "cerrar" de un formulario puede deshabilitarse:
* El anterior código lo he recogido de Greatis.com. Última edición por dec fecha: 29-08-2006 a las 04:59:27. |
#3
|
|||
|
|||
No llega
Gracias por la rapida respuesta David. Verás, la aplicación la utilizaré para mi trabajo. Y la cuestión es conseguir una aplicación que me muetre unos datos y no moleste. El problema no es cerrarla o no. El tema es que esté ahi siempre y no moleste para trabajar. Por eso digo que sea una ventana en overlay como por ejemplo el OSD de un monitor, comprendes?
|
#4
|
||||
|
||||
Hola,
Sí; ahora sí que te comprendo perfectamente, me parece. Y lamento no poder ayudarte. Ignoro lo que sea trabajar con DirectX. Lo más cercano que conozco a lo que dices es la "ventana de arrastre" conque cuenta el programa FlashGet, empero, aunque "siempre arriba" y "transparente", lo cierto es que si se sitúa por encima del botón para cerrar cualquier ventana... no podrá hacerse, porque no podrá "pasarse" por encima. Sí; supongo que la cosa sería conseguir el efecto de las ventanas en que suelen mostrarse los "menús de opciones" de los monitores... pero, chico... ahora mismo no tengo ni idea de cómo podría hacerse algo así... lamento no poder ayudarte, ya te digo. Una cosa se me ocurre, y es que probaras buscando información sobre Open GL. Probablemente puede trabajarse con DirectX desde Delphi, casi seguro, pienso, pero, lo que tengo claro es que puede trabajarse con Open GL y acaso pudieras aprovecharte de algún componente, tutorial, etc., etc. Busca en estos mismos Foros, por ejemplo, a ver si puede servirte de algo. Última edición por dec fecha: 29-08-2006 a las 10:09:59. |
#5
|
||||
|
||||
Antes de nada, el menú de configuración de los monitores esta programado dentro del hardware del propio monitor, y es independiente del sistema operativo. Volviendo a la pregunta, algunas aplicaciones similares lo que hacen es crear una ventana y recortar la región de la misma alrededor de las letras que muestran, de esta forma las letras dan la sensación de estar flotando. También nos queda la opción de dibujar directamente sobre la pantalla, pero existirían dos problemas, borrar lo que dibujamos y evitar que se borre al mover otras ventanas.
Pero basta de tanta teoría y vamos con un poco de código, aquí te dejo un ejemplo, muestra un reloj en pantalla, recortando la región de la ventana alrededor de las letras provocando el efecto de que las letras están dibujadas directamente sobre la pantalla. Puedes moverlo pulsando sobre una letra y arrastrándolo. |
#6
|
|||
|
|||
Voy a probarlo
Si, lo de los monitores se que va sobre hardware, pero yo supongo que es un buen ejemplo porque me imagino que tendriamos que trabajar directamente sobre la tarjeta gráfica, pidiendole que dibuje... no? O algo así.
El ejemplo que me proporcionas podría ser la solución que busco. Aparece el reloj impreso en pantalla, sin embargo puedo interactuar con el con el ratón. El tema sería conseguir que al pulsar encima no se interactuase con el. Como si solo fuera un dibujo que está ahí epro no se le puede tocar... me explico? El tema sería no tocarlo con el raton para que no moleste. En caso de no ser posible esto, es decir que no hallemos la forma de hacerlo tb podriamos hacer que al poner el raton por encima de la ventana se fuese al fondo de manera que nunca pudiese recibir el foco puesto que se esconde antes de poder hacerlo y volver a aparecer StayOnTop a los 2 o 3 segundos. De esta manera evitariamos que nos moleste para tocar las cosas que hay debajo de esa aplicación. Última edición por LordVermiis fecha: 29-08-2006 a las 15:15:04. |
#7
|
||||
|
||||
Parece que la solución es hacer nuestra aplicación un poco asustadiza . En el siguiente ejemplo, cuando el ratón pasa por encima de alguna de las letras, la ventana se oculta y no se vuelve a mostrar hasta que el ratón sale fuera de los limites de la ventana. También e añadido un pequeño icono en la bandeja del sistema con un menú para cerrar la aplicación, y para que deje de ocultarse, permitiéndonos entonces arrastrar la ventana.
¿que te parece ahora? |
#8
|
|||
|
|||
Dios esa aplicacion tal y como la muestras es perfecta total y absolutamente.... Con eso me podría arreglar perfectamente. La he hecho semitransparente. Lo que pasa es que utilizo Delphi 2005 y me da problemas con varias cosas. La primera es una funcion que se llama FillChar que me dice que no la encuentra. ¿¿Podrias pasarmela en un .txt?? Y luego me dice que el Shell_NotifyIcon(NIM_DELETE, @IconData); "[Error] ufrmMain.pas(151): E2396 Unsafe code only allowed in unsafe procedure", esto que significa???
Edito de nuevo: Ya encontré el error, el error es la @ pq no estoy utilizando .NET así que es la @ la que lo hace unsafe, quitandosela funciona perfectamente y no da error. Lo que no entiendo es que es la funcion FillChar que definiste que te dije que no encuentra puesto que comentandola para que no de error funciona todo perfectamente... Aun así me queda la duda de como podria ser haciendolo con DirectX, es decir, dibujandolo directamente en pantalla. Sabrias como se hace? Muchisisisimas gracias por la ayuda Última edición por LordVermiis fecha: 30-08-2006 a las 15:08:58. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ventana pop-up o algo asi | FullDelphi | Varios | 3 | 10-04-2006 08:46:24 |
Como obtengo esto? | Migpal | OOP | 2 | 24-10-2005 18:56:04 |
como hago esto | meosre | MySQL | 3 | 06-10-2005 17:14:09 |
Como soluciono esto? | jam888 | Varios | 3 | 24-11-2004 16:33:02 |
Como generar esto? | nefy | SQL | 2 | 02-04-2004 17:34:46 |
|