Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2006
LordVermiis LordVermiis is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
LordVermiis Va por buen camino
Lightbulb 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.
Responder Con Cita
  #2  
Antiguo 29-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Flag: UINT;
  AppSysMenu: THandle;
begin
  AppSysMenu:=GetSystemMenu(Handle,False);
  Flag:=MF_GRAYED;
  EnableMenuItem(AppSysMenu,SC_CLOSE,MF_BYCOMMAND or Flag);
end;

* El anterior código lo he recogido de Greatis.com.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 29-08-2006 a las 04:59:27.
Responder Con Cita
  #3  
Antiguo 29-08-2006
LordVermiis LordVermiis is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
LordVermiis Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 29-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 29-08-2006 a las 10:09:59.
Responder Con Cita
  #5  
Antiguo 29-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo25.zip (3,8 KB, 62 visitas)
Responder Con Cita
  #6  
Antiguo 29-08-2006
LordVermiis LordVermiis is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
LordVermiis Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 29-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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?
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo25.zip (4,9 KB, 63 visitas)
Responder Con Cita
  #8  
Antiguo 30-08-2006
LordVermiis LordVermiis is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
LordVermiis Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 07:35:50.


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
Copyright 1996-2007 Club Delphi