Ejemplos usando el Api de windows para Visual basic
<Volver> - Anterior - Siguiente
En esta página se describe el uso de esta función, que puede ser útil entre otras cosas, por ejemplo para aplicaciones de estilo multimedia o formularios splash o de presentación por decir algunos usos
Nota Importante En la siguiente página a esta, hay un ejemplo que muestra como poder subclasficar la ventana, para poder repintar la misma durante el transcurso de la animación, ya que si no se hace esto, al utilizar solo la función Api AnimateWindow como se ve en esta página, en objetos que poseen la propiedad Hdc ( Formularios y picturebox ), los mismos se visualizarán en forma incorrecta.
La declaración del api AnimateWindow es la siguiente
Private Declare Function AnimateWindow Lib "user32" ( _ ByVal hwnd As Long, _ ByVal dwTime As Long, _ ByVal dwFlags As Long) As Long
El primer parámetro hwnd , corresponde al Hwnd de ventana a aplicar el efecto.
El parámetro dwTime, es el tiempo de duración del efecto. Este valor está expresado en milisegundos, donde lo mas común es pasar un valor entre 200 y 500 milisegundos
El parámetro dwFlags, son los valores que permite indicar que efecto usar y algunas otras propiedades, como por ejemplo la orientación del efecto, es decir que la ventana vaya apareciendo desde el centro, desde el lado izquierdo hacia el derecho, con efecto Fade o transparencia .
Estos flags se pueden combinar mediante el operador Or para usarlos en conjunto. A continuación se ven algunos ejemplos
Efecto de transparencia o efecto fade
El siguiente código , hace que la ventana vaya apareciendo paulatinamente usando como constante AW_BLEND . El valor de los milisegundos se establece en 250
Nota: Para que al finalizar la animación, la ventana recupere el foco, se debe pasar en el parámetro Flags, la constante AW_ACTIVATE, como se ve en el ejemplo anterior.
En este caso , la ventana aparece desde el lado izquierdo hacia el derecho.
Usa la constante AW_HOR_POSITIVE como valor para el parámetro dwFlags
Nota: para cambiar las direcciones utilizar las siguientes costantes:
Private Const AW_HOR_NEGATIVE = &H2 ' Derecha a izquierda Private Const AW_VER_POSITIVE = &H4 ' Arriba abajo Private Const AW_VER_NEGATIVE = &H8 ' Abajo hacia arriba Private Const AW_HOR_POSITIVE = &O1 ' Izquierda a derecha
Se pueden combinar las constantes anteriores para hacer la animación en forma diagonal
Por ejemplo, al pasar como flags la combinación AW_HOR_POSITIVE Or AW_VER_POSITIVE , la animación de la ventana se produce desde la esqui9na superior izquierda en forma diagonal
.. Idem al anterior, pero comenzando desde la esquina inferior derecha
Para animar la ventana desde el centro se debe utilizar la constante AW_CENTER
Ejemplo
Por ejemplo si queremos cargar un Form2 al persionar un Command1 desde un Form1, no es necesario ejecutar el método Show del form2 y luego ejecutar el Api, simplemente llamando AnimatedWindow la ventana se cargará y mostrará. Es decir esta función , además de animar la ventana, la carga y la muestra. Si ya estaba cargada, pero oculta ..solo la muestra
Ejemplo
Agregar un Form2 y un Command1 en el Form1
Código en el clic del Command1
AnimateWindow Form2.hwnd, 300, AW_CENTER Or AW_ACTIVATE
Para realizar las animaciones vistas , pero en ves de que se produzcan en el momento de llamar a la ventana, y poder hacerlo al ocultar o descargar la misma , de debe utilizar la constante AW_HIDE como valor para el parámetro dwFlags
Por ejemplo lo siguiente, al descargar el formulario ( en el evento Form_Unload ) , anima la ventana con el efecto AW_BLEND, y también le indica la constante AW_HIDE. Una ves terminada la animación la ventana se descarga
.. si solo queremos ocultar la ventana, pero no descargarla de memoria, ejecutar el mismo ejemplo anterior, pero no el Unload form
Además de animar ventanas, también se pueden animar controles que posean Hwnd, .. al fin y al cabo son también ventanas
El siguiente ejemplo, aplica un efecto de animación a un control Picturebox. El efecto hace aparecer y ocultar desde el centro con la constante AW_CENTER
Colocar un Command1 , un Command2 y un Picture1. Al picture cargarle un gráfico
Importante : notar que se utiliza luego de animar el picture, el método Refresh
Código en el formulario
Este otro ejemplo es similar al anterior, pero se recorren mediante un bucle For Each todos los controles que haya en el formulario y se verifica que posean la propiedad Hwnd. Si posee dicha propiedad, llama a la Rutina Animar
Colocar en el formulario varios controles que posean Hwnd, DriveListbox, listbox, combo etc. y también dos CommandButton para la animación de los mismos
Código fuente en el formulario
Si se desea aplicar el efecto a controles que no posean hwnd, como los Label o Shape, lo que se puede hacer es colocarlo dentro de un contenedor que si posea Hwnd y ocultar dicho contenedor, por ejemplo meterlo dentro de un control frame
Nota: Una ves teminada la animación, como se vió en el ejemplo anterior, se refresca el control u obeto con el método Refresh, pero hay un problema ( que se comentó al principio de la página) , y es que si bien se puede utilizar el método Refresh para refrescar el control y solucionar este problema " a medias ", lo que no se puede solucionar es el tema de que la ventana, " mientras se está animando ", NO se repinta ( Se visualiza de color negro ) en los objetos que posean Hdc, como los formulario o picturebox
La única forma de solucionar esto es haciendo subclasificación
En la página siguiente se muestra como subclasificar la ventana para interceptar el mensaje WM_PRINTCLIENT , y poder hacer el redibujado completo mientras se ejecuta la animación, y de esta manera poder visualizar los controles correctamente
Subclasificación para hacer Animación de ventanas con la Función AnimateWindow
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar