7 de mayo de 2018

Agregar efectos a sus formularios

Artículo original: Add a fading effect to your forms
http://www.ml-consult.co.uk/foxst-40.htm
Autor: Mike Lewis
Traducido por: Ana María Bisbé York


Al crear formularios que se muestren y desaparezcan gradualmente puede añadir efectos visuales a sus aplicaciones Visual FoxPro

Puede haber notado que en sus aplicaciones favoritas de Windows algunas ventanas aparecen y desaparecen gradualmente cuando se abren, en lugar de abrirse instantáneamente. De forma similar, cuando se cierra una ventana, puede tomar un segundo o más en lugar de desaparecer de pronto. Esto puede ser un efecto visual agradable (siempre y cuando sea con moderación). La técnica trabaja especialmente bien con ventanas desplegables y alertas que el usuario puede no esperar. La aparición gradual de una ventana es frecuentemente más agradable a la vista que una que destella de pronto en la pantalla.

En este artículo, vamos a explicar cómo agregar este efecto a sus formularios Visual FoxPro. Describiremos además una clase formulario sencilla, llamada FadeForm, que incorpora esta técnica. Puede descargar la clase y utilizarla directamente para crear sus propios formularios. Vea debajo las instrucciones para la descarga.

Esencialmente, esta técnica se encarga de incrementar o disminuir gradualmente la transparencia del formulario. Incluso si no está interesado en crear formularios, puede adaptar este código para otras situaciones que pudiera desear hacer un formulario parcialmente transparente.

Un par de inconvenientes

Antes de seguir adelante, debemos puntualizar un par de limitaciones de esta técnica. Primeramente necesita ciertas llamadas de API que trabajan solamente en Windows 2000 o superior. Si sus usuarios aun trabajan en Windows 98, no podrá ofrecerles esta posibilidad.

Más importante aun, la técnica trabaja solamente en formularios de nivel superior. Un formulario de nivel superior es uno que aparece independientemente de la ventana de salida principal de la aplicación. De forma predeterminada, tiene su propio botón en la barra de tareas de Windows (se puede ocultar este botón al igualar a .F. la propiedad ShowInTaskbar y puede moverse fuera de la ventana de salida. Para crear un formulario de nivel superior iguale a 2 la propiedad de formulario ShowWindow (ya lo hemos hecho en la clase FadeForm en la descarga de este artículo)

Crear un formulario transparente

Para lograr esta magia, el formulario utiliza una función API de Windows llamada SetLayeredWindowAttributes(). Esta función puede ayudar a crear un grupo interesante de trucos visuales. En el que estamos interesados es en la capacidad de hacer un formulario transparente. Más exactamente, puede incrementar o disminuir el grado de opacidad de un formulario en pasos muy pequeños. El factor de opacidad puede variar desde 0 (completamente transparente) a 255 (completamente opaco).

Entonces, para hacer que el formulario aparezca gradualmente, puede comenzar haciéndolo completamente transparente. Puede entonces, incrementar la opacidad hasta que el formulario sea completamente opaco. De forma similar, para hacer que el formulario desaparezca puede comenzar con el máximo de opacidad (255) y disminuirla hasta que alcance cero.

Declarar funciones API

Antes de que haga nada de esto, tiene que declarar la función SetLayeredWindowAttributes() dentro de VFP. Además, debe declarar un par de llamadas a funciones API: SetWindowLong, que activa el formulario como "ventana en capas", y Sleep(), el que le permite introducir una demora corta cada vez que ajusta el factor de opacidad.

Como todas las declaraciones API, es ideal que estos DECLAREs se hagan sólo una vez, cerca del inicio de la sesión. Para mayor conveniencia, la clase formulario FadeForm en el archivo de descarga ejecuta la declaración en su evento Load; pero esto es lo ideal. Esto significa que las funciones se van a re-declarar cada vez que cualquier formulario basado en esta clase se instancie, lo que es una pérdida de tiempo. Sugerimos mover estas declaraciones a algún punto más adecuado al inicio de comienzo del programa principal.

He aquí el código para declarar las funciones API (las primeras dos de estas requieren Windows 2000 o superior):

DECLARE INTEGER SetWindowLong In Win32Api ; 
  INTEGER HWnd, INTEGER Index, INTEGER NewVal

DECLARE INTEGER SetLayeredWindowAttributes In Win32Api ; 
  INTEGER HWnd, STRING ColorKey, ; 
  INTEGER Opacity, INTEGER Flags

DECLARE Sleep IN WIN32API INTEGER Duration

Lograr que aparezca el formulario ...

El trabajo real de lograr que el formulario aparezca gradualmente se hace en el método FadeIn, el que debe ser llamado desde el Init del formulario. Ya que el formulario es normalmente invisible durante la instalación, FadeIn debe ser idealmente llamado al final del procesamiento del Init. Esto se hace automáticamente desde el método Init de la clase FadeForm. Si sobreescribe el método Init, asegúrese de llamar explícitamente a FadeForm en un lugar adecuado.

El método FadeIn comienza por verificar una propiedad de formulario llamada lFade, la que actúa como un interruptor maestro para el efecto gradual al aparecer y desaparecer. Esta propiedad está igualada a .F. de forma predeterminada. Para lograr este efecto, asegúrese de cambiarla a .T.

Esta es la parte principal del código del método FadeIn:

* Si no hay que lograr el efecto, no hace nada 
IF NOT thisform.lFade 
  RETURN 
ENDIF

* Comienza por crear el formulario completamente transparente 
SetWindowLong(THISFORM.hWnd, -20, 0x00080000) 
SetLayeredWindowAttributes(THISFORM.hWnd, 0, 0, 2)

* Muestra el formulario (le dice a VFP que muestre un formulario en el fondo 
* no se mostrará nada en la pantalla porque 
* el formulario está completamente transparente) 
thisform.Visible = .T.
* Ahora, se muestra gradualmente, necesitando para ello aproximadamente un segundo 
lnTrans = 10 
DO WHILE .T. 
  SetLayeredWindowAttributes(THISFORM.hWnd, 0, lnTrans, 2) 
  lnTrans = lnTrans + 10 
  IF lnTrans > 255 
    EXIT 
  ENDIF
  Sleep(35) 
ENDDO

* Ahora el formulario está completamente opaco

Si desea ajustar la velocidad de este efecto, cambie el valor numérico pasado a la función Sleep(). Esta es la cantidad de milisegundos durante el cual el método se va a detener cada vez que se ajuste la opacidad. Auméntelo para hacer que el formulario se abra más lentamente, disminúyalo para lograr lo contrario.

... Y desaparecer

El método FadeOut de la clase (que no está mostrado aquí) trabaja de la misma forma que FadeIn, la diferencia principal, es que disminuye el factor de opacidad en lugar de incrementarlo. Además, FadeOut no necesita alterar la propiedad Visible del formulario.

Llame al método FadeOut desde el método Destroy del formulario. Como con FadeIn, la clase en el archivo de descarga lo hace de forma predeterminada. Si sobreescribe el método Destroy, asegúrese de llamar explícitamente al método FadeOut. (Tenga cuidado de no llamar más de una vez a FadeOut o FadeIn por sesión de formulario, o usted creará un efecto realmente extraño).

Descargar la clase

Seleccione el enlace que aparece más abajo para descargar la clase FadeForm. La clase está contenida en una biblioteca de clases (FadeForm.VCX) el que se encuentra a su vez en un archivo ZIP. El tamaño de la descarga es solamente 3 KB.

Puede incluso utilizar la clase tal cual, o extraer el código para utilizarlo en sus propios formularios o clases. De cualquier manera, lea el método Documentation, que contiene notas sobre cómo utilizar la clase.

Descargue ahora desde http://www.ml-consult.co.uk/download/fadeform.zip

Como siempre, apreciamos sus comentarios sobre nuestros artículos y descargas (vea nuestra página de contactos).

Mike Lewis Consultants Ltd. Junio 2006.


No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.