22 de noviembre de 2006

Formularios transparentes en Visual FoxPro al descubierto

Artículo original: Transparent Forms in Visual FoxPro Revealed
http://weblogs.foxite.com/bernardbout/2006/08/27/transparent-forms-in-visual-foxpro-revealed/
Autor: Bernard Bout 
Traducido por: Ana María Bisbé York


Cómo se ha hecho

Mi post anterior fue algo vago a propósito porque yo quería despertar un poco más de interés. Sólo describir el método utilizado para describir el efecto podría ser mucho más sencillo; pero el interés hubiera terminado ahí.

Muchos lectores "picaron". Algunos pensaron significativamente diferente a lo que yo había hecho, no obstante existen muchas formas de cambiar el diseño. Otros sencillamente no lo hicieron.

En cualquier caso, en esta entrada voy a describir el método que he utilizado para alcanzar el efecto medio transparente de un formulario. Espero que los lectores piensen sobre las técnicas utilizadas y lleguen a su propia forma de hacerlo.

El formulario principal es un formulario SDI con mi clase de navegación "Outlook". Básicamente seleccionando una opción al hacer clic en los botones azules llena un árbol debajo con las ventanas disponibles. Haga clic sobre uno de estos abre una ventana a la derecha donde tiene lugar la acción. Hasta aquí todo se entiende. El formulario SDI tiene una gran imagen de fondo.



Justo debajo de "Product ordering" se puede ver "X". Esto, normalmente tiene Visible = .F. y lo empleo como marcador.


Para mi formulario hijo, creé una clase formulario y todos los formularios hijo heredan de esta clase. Esta clase formulario es un formulario normal con TitleBar = 0 y BorderStyle = 0 (sin borde). Luego le di el tamaño requerido.

Abrí la gran imagen de fondo y copié un área de esta comenzando por la "X" que está debajo en el botón a la derecha. Ahora tengo una imagen más pequeña que la imagen principal. Apliqué una capa de máscara blanca sobre ella y ajusté la transparencia de la máscara, similar a lo que hace Word cuando se crea una marca de agua. Obtuve la imagen que se muestra debajo.



Así hice el fondo de mi clase formulario. Tuve que ajustar manualmente el tamaño del formulario hasta que alcanzó justamente el tamaño de la imagen. Ahora tengo una clase base que puedo utilizar para todos mis formularios. He aquí uno de los formularios hijo en tiempo de diseño.



Cada formulario hijo se creó entonces como un formulario normal con objetos y código. El evento Click de cada elemento del árbol abre el formulario adecuado.

En el INIT de la clase formulario agregué este código:
LPARAMETERS toForm
With ThisForm
  * LabelX es el nombre del objeto etiqueta con caption “X” y color rojo  .
  .Top = toForm.LabelX.Top
  .Left = toForm.LabelX.Left
ENDWITH 
En el Click del elemento del árbol se llama al formulario adecuado de la siguiente forma:
DO Form MyChildForm With ThisForm NOSHOW
SHOW Window MyChildForm IN WINDOW Mainform
Con este código el formulario hijo aparece en el lugar correcto y se moverá si el formulario principal se mueve. No se puede redimensionar por razones obvias. En las pruebas he ajustado a la "X" para que las imágenes estén alineadas correctamente.

El efecto final se puede ver en esta pantalla de abajo. A propósito he dejado un borde más ancho alrededor del formulario hijo de tal forma que el efecto sea más obvio.





Esto amplía el límite del formulario y muestra el efecto:

Esto da la impresión que el formulario hijo es transparente y que la imagen del formulario principal puede ser vista a través de el. Los controles son opacos como deben ser. Este efecto no puede lograrse normalmente en Windows XP. Solamente es posible con Vista y nuevas APIs.

Completada la ilusión

¡ Viva la Fox !

He aquí otro enlace con una forma similar que muestra el efecto: http://www.foxite.com/archives/seethrough-form-0000105324.htm

1 comentario :

  1. Esto no es transparente, es solo la atenuación de una imagen.

    ResponderEliminar