Visual Basic no soporta directamente imágenes gif animadas. Lo que no debe interpretarse como que no tiene posibilidad de reproducirse animación.
Hay varios métodos dependiendo de para que se necesite.
Te señalo 6 métodos (1,2,3...6), aunque no explico en profuncdidad en todos.
Por ejemplo si tratas de reproducir un vídeo y/o sonido, puedes optar por un par de soluciones que te propongo...
Ve al formulario y abre la ficha de selección de componentes .... por defecto se abre en controles, ve a 'objetos insertables'... elige los 2 que te indico que es con los que vamos a probar:
* clip multimedia:
* Windowos media player
1) Clip multimedia no requiere gran cosa, simplemente lo sitúas en el formulario, y por encima de él colocas un label que diga algo como "Pulsa doble click para abrir el archivo a reproducir" (o incluso en la propiedad tooltiptext). Eso es todo, si ejecutas la aplicación ahora verás que cuando hagas doble click se abre un control con un menú, yendo al menu archivo al pulsar en abrir permite localizar el tipo de archivo deseado para reproducir (vídeo y/o audio) una vez seleccionado, la reproducción comienza en una ventana aparte... es trabajo tuyo si deseas capturar dicha ventana e incorporarla a tu formulario.
2) Windows Media Player (el otro objeto insertable añadido): Ponemos una instancia en el formulario, el nombre del control queda muy largo, supongamos que lo abreviamos a sólo: Wmp, bien añade 2 botones al formulario , un checkbox y 1 timer, desde uno de estos botones podrás configuras para localizar el archivo multimedia deseado (después que pruebes el código mostrado), tal vez usando el commondialog tal vez sea un archivo a elegir de una lista que ya proporcionas...
Te pongo un sencillo ejemplo de código, donde se da por hecho que ya se conoce el vídeo a mostrar. Fíjate que en realidad bastaría con el código para localizar y asignar el vídeo, luego se podría usar la interfaz que provee el control, que es de todos conocidas, pero para que veas algo de código, he puesto código para manejarlo con esos 2 botones ... play, pausa, stop, asignar vídeo y pantalla completa.
Private FullScreen As Boolean
Private Sub Form_Load()
Timer1.enabled=false
Timer1.interval=50
Wmp.settings.autoStart = False
Command1.Caption = "Sin medios"
Command2.Caption = "Elegir medio..."
Check1.caption= "Pantalla completa"
End Sub
Private Sub Command2_Click()
If Wmp.URL = "" Then
Wmp.URL = "C:VideossNavidades-2009.avi"
Command1.Caption = "Reproducir"
Command2.Caption = "Parar"
Else
Timer1.Enabled = False ' nos aseguramos que un problema de carga no se perpetúe...
Wmp.Controls.stop
Command2.Caption = "Elegir medio..."
Command1.Caption = "Sin medios"
Wmp.URL = ""
End If
End Sub
Private Sub Command1_Click()
On Local Error GoTo Insiste
If Wmp.playState <> wmppsPlaying Then
If Wmp.URL = "" Then
Call Command2_Click
Else
Select Case Wmp.playState
Case wmppsPaused, wmppsStopped, wmppsReady ' no tienen porque agruparse en la misma acción, pero para el ejemplo vale.
Wmp.Controls.play
Command1.Caption = "Pausar"
DoEvents
If Wmp.FullScreen <> FullScreen Then
Wmp.FullScreen = FullScreen
End If Case Else
Beep ' otras acciones ante otros estados...
End Select
End If
Else
If Wmp.URL <> "" Then
Wmp.Controls.pause
Command1.Caption = "Reproducir"
Else
MsgBox "Primero debe seleccionar un medio, pulse el botón 2."
End If
End If
Exit Sub
Insiste:
' el error se produce porque antes del estado play está en estado de 'transición' hasta haber decodificado lo suficiente... este tiempo depende del vídeo y el códec que emplee
Err.Clear
Timer1.Enabled = True ' lo derivamos a un bucle que espera hasta que se ponga en play.
End Sub
Private Sub Check1_Click()
FullScreen = (Check1.Value = 1)
If Wmp.playState = wmppsPlaying Then ' si está en play la orden se obedece inmediatamente, sino, queda guardada para cuando se haga play.
Wmp.FullScreen = FullScreen
End If
End Sub
' le damos tiempo a que 'cargue', cambiando de estado de transición a estado reproduciendo.
Private Sub Timer1_Timer()
If Wmp.playState = wmppsPlaying Then
Timer1.Enabled = False
Wmp.FullScreen = FullScreen
End If
End Sub
Luego pinchando sobre el control en tiempo de ejecución el propio control ofrece bastantes cosas, incluído el 'fullscreen' pausa stop y tal, por lo que como te indicaba, bastaría un botón para parar el vídeo actual si está en marcha, seleccionar un nuevo origen y opcionalmente darle a play si autostart está en false.
3) Tambien puedes usar un control MCI...
4) El control 'Microsoft directMedia animation control', concretamente una instancia de 'spriteControl'... permite hacer animaciones.
5) Si lo que quieres es utilizar animaciones del estilo 'moviendo ficheros', entonces resulta muy útil el control 'animation ' que está en la librería de controles 'Microsoft Windows common controls 2.5.0' y 2.6.0 (la 2.6.0 se diferencia en que incluye más controles, la 2.5.0 solo incluye 2 el control animation y un control 'updown').
Este control (animation). Permite usar un AVI que tu (o quien sea) hayas compuesto. tiene algunas limitaciones
* Está limitado a (creo recordar) 64 kb de tamaño como maximo (o quizás 50kb, no recuerdo exactamente). (tamaño del fichero)
* No puede incluir audio el AVI que se utilice, dará error.
* Las imágenes han de ser bmp, por lo que o bien son muy pequeñitas o bien (es lo que yo suelo hacer) comprimirlas en .RLE (siguen siendo bmp).
Luego algunas notas:
* Para las transparencias se ha de usar un color el mismo para todas las imágenes cuando formes el avi.
* Recuerda que el tamaño de los frames son definitivos, el control podrá tener el tamaño que se quiera, pero no rescala la animación.
* Asegúrateque todos los frames tienen el mismo tamaño.
* Cuando tengas todas las imágenes usa un programa para montar el AVI.
* Una vez montado el avi, debes probarlo para ver si no cumple alguna característica.
Animation1.open "C:Mi animacion.avi" ' carga y ejecuta la animación.
Animation1.stop ' pausa la animación.
Animation.Play ' pone en marcha de nuevo la animación, admite 3 parámetros para señalar como se quiere
Animaton1.Close ' descarga la animación, ahora no se admite ni play ni stop
Puede ser útil que guardes el avi en un archivo de recursos....
6) Y por último, a las bravas puedes usar un control picture oculto con una imagen que contiene las diferentes imágenes que forman la animación, ordeenadas en columnas y filas del mismo tamaño, luego con un timer vas tomando cuadros de la imagen original y pegándolos donde necesitas . El control pictureclip, puede ayudarte bastante con esto.