Ejemplos usando el Api de windows para Visual basic

186 - Subclasificación para hacer Animación de ventanas con la Función AnimateWindow

<Volver> - Anterior - Siguiente



 

 

 

Actualizado

Proyecto actualizado para usar la función del Api AnimateWindow desde un módulo de clase.

Para hacer el efecto de animación hay que usar la función Animate enviandole como parámetro el control o formulario a animar, la acción ( Ocultar o mostrar) , el intervalo expresado en milisegundos y el estilo o efecto de animación, que puede ser desde el centro , desde los costados o con transparencia

 

 

 

por ejemplo esto anima el form1 desde el centro

Call .Animated(Form1, eSHOW, 300, AW_CENTER)

 

Si se usa el efecto Blend (transparencia ) para la animación, puede que en algunos casos sea lento.

Nota: para animar controles , el efecto blend no funciona, funciona solo para formularios

Descargar ejemplo

 

 


 

Ejemplo para hacer subclasificación de la ventana que se va animar mediante el api AnimateWindow

 

Esta página es la continuación de la página anterior, donde se vieron algunos ejemplos y descripción de la función AnimateWindow para poder realizar las animaciones en ventanas y controles

Pero como se mencionaba anteriormente, al realizar una animación en un objeto que posee la propiedad Hdc ( Formularios y picturebox), la ventana no se repinta, y por eso mismo , hasta que la función Api no termina de ejecutar la animación , se ve de color negro hasta que no vuelva repintar manualmente, o refrescando el objeto con el método Refresh

En la Msdn, en este enlace : AnimateWindow Function , no da un ejemplo de como solucionar este problema, solo menciona que se debe subclasificar la ventana e interceptar el mensaje WM_PRINTCLIENT, para redibujarla.

Buscando en la web, encontré un ejemplo ya hecho en el siguiente foro : AnimateWindow API

Este ejemplo funciona bien, pero no funciona para el efecto Fade o transparencia mediante la constante AW_BLEND . ( Para los demás efectos animados , .. hasta donde lo probé funciona correctamente y los controles se visualizan normalmente )

Es decir funciona con el efecto AW_BLEND, pero el problema es que algunos controles que poseen la propiedad BorderStyle, no se repintan bien, como los controles Picturebox y los textbox. Si se coloca dentro del proceso que subclasifica la ventana, y se fuerza al repintado del control ( ControlConBorderStyle.Refresh ), el objeto se visualiza, pero pierde el borde, y para que vuelva a visualizarce es necesario minimizar y maximizar la ventana. .. Asi que tener en cuanta este detalle

 


A continuación dos ejemplos que hice , utilizando el código para subclasificar y repintar la ventana

 

 

Descargar proyecto

El primero es un formulario Splash o de presentación, y el segundo ejemplo, es un visualizador simple de imagenes , que permite , entre cada cambio de imagen , ver un efecto tipo diapositiva al pasar entre cada imagen seleccionada

 

Ejemplo para crear un formulario Splash

En este ejemplo se inicia el poyecto desde un SubMain. Desde el SubMain se llama al Formulario Splash. Este formulario se abre con una animación. Luego de unos segundos, se cierra este formulario y se abre,el formulario principal del programa, también con una animación

La función que inicia la animación se llama Animar, y tiene como parámetros el Formulario, y los flags para el tipo de animación que realizará ( Ver la página anterior que explica el paso de parámetros y el uso de los flags para los distintos tipos de animación en las ventanas )

 

Colocar en un nuevo proyecto:

Desde el menú Proyecto > Propiedades de proyecto , indicar el objeto inicial donde se arrancará el programa, en este caso desde el procedimiento Sub Main

Al formulario Splash se le puede quitar los bordes, es decir la propiedad BorderStyle en 0

 

Código fuente en el FrmSplash

 

 

Código fuente en el módulo bas que permite subclasificar la ventana para redibujarla y que también tiene el procedimiento Sub Main para arrancar el programa

 

 

 


Ejemplo 2 - Visualizador de imagen con un control Picturebox animado

 

Descargar proyecto

El siguiente ejemplo lo que hace es visualizar gráficos en un control picturebox , pero cada ves que se cambia de imagen, se le aplica un efecto animado al control picturebox, generando un efecto tipo diapositiva

Colocar en un formulario los siguientes controles :

 

Al PicImagen, colocarlo dentro del picContenedor

vista del formulario con los controles para crear el ejemplo de animación de imagenes

 

En el list1 se cargan los efectos de animación mediante los flags para usar con el Api AnimateWindows

La vista del ejemplo es como la siguiente imagen, donde el gráfico se redibuja a escala

 

vista final del ejemplo para realizar la animación del picturebox

 

Primero se lista el código fuente del formulario. Dicho código es el que tiene la función que carga y dibuja la imagen a escala en el picture PicImagen y que hace la llamada a la función Animar, que es la que tiene el código que usa la función Animatewindow junto con los demás procedimientos que subclasifican la ventana para poder redibujar correctamente el picturebox.

 

Código fuente en el formulario

 

 


Código fuente en el módulo bas

 

 



Buscar en Recursos vb