Hola...como puedo añadir un gif a un form? y que este cuando se ejecute se mueve (actue normal)?
Lo he metido por picture box e image...y se queda estatico...
A que se debe?
bajate un ocx que permita la reproduccion de este para que no se quede en la primera imagen
Edito: de aqui lo puedes bajar este es bueno
AQUI (http://s42.yousendit.com/d.aspx?id=0NYKY11ID9FC90T0N7CYGAMFOK)
un saludo.
Ya me lo baje pero no se muy bien que hacer con el...
En el rar me vienen tres..
AniGIF.ocx
AniGIF2.lic
AniGIF ( Control Typelib Cache)
He agregado el ocx al proyecto...como puedo agregar los dos otros? ???
Muchas gracias tio ;)
es solo el ocx , el lic es para que no caduque la licencia de dicho control, solo con ese ya puedes reproducir tus gif's (obviamente descomprimelos en la misma carpeta y asi ya tienes el control que necesitabas
un saludo.
Pues lo descomprimo y lo mismo en la misma carpeta y no funca... :-\
Ya he logrado que funcione...tienes que activarlo...
Si alguien tiene la curiosidad de como es que me lo diga :P
Gracias Xpeed
si no keres usar un OCX pode hacer lo siguiente
(es medio complicado, te tiro la idea nomas ::D)
1: Le haces una copia al GIF (pq lo vamos a tener que descomponer) y le pones de nombre gifEntero
2: Te bajas el Microsoft GIF Animator (buscalo x google)
3: Abris tu GIF con este programita
4: Una vez abierto, borras todas las imagenes MENOS la primera.
5: Le das a "Guardar como..." y le pones de nombre Gif1
6: Abris el gifEntero (el que guardaste al principio de todo) y repetis el paso 4, pero en vez de dejar la PRIMERA foto dejas la SEGUNDA
7: Guardas como Gif2
8: Supongo que se entiendo el procedimiento. Cuando ya hayas guardado todas las imagenes que tiene el GIF abris el VB y pones un Picture, un ImageList y tantos Timers como imagenes tengas.
9: Pones todas las imagenes que guardaste (Gif1, Gif2, Gif3, ...) en el ImageList
10: Ahora viene el codigo xD
Private Sub Form_Load()
Picture1.Picture = ImageList.ListImages("Gif1").Picture 'Pone el la primera imagene en el picture
Timer1.Interval = 500 'Empieza la cadena del GIF
End Sub
Private Sub Timer1_Timer()
Picture1.Picture = ImageList1.ListImages("GIF1").Picture
Timer2.Interval = 500 'Este valor lo podes ir cambiando depende de la velocidad que kieras que tenga tu GIF
Timer1.Interval = 0
End Sub
Private Sub Timer2_Timer()
Picture1.Picture = ImageList1.ListImages("GIF2").Picture
Timer3.Interval = 500 'Este valor lo podes ir cambiando depende de la velocidad que kieras que tenga tu GIF
Timer2.Interval = 0
End Sub
Private Sub Timer3_Timer()
Picture1.Picture = ImageList1.ListImages("GIF3").Picture
Timer1.Interval = 500 'Vuelve al Timer (genera un bucle)
Timer3.Interval = 0
End Sub
Bueno espero que se haya entendido
sino, postea ^^
NOTA: si te las arreglas podes hacer GIFs con tus propias imagenes en el VB ;)
un abraz0 ;)
-G0nz4-
En Image1(1) ...hasta... Imagen1(N) para cada cuadro del Gif
Private Sub Timer1_Timer()
Static i
i = i + 1: If i = Image1.Count Then i = 1
Image1(0).Picture = Image1(i).Picture
End Sub
También con el ImageList, puedes hacerlo parecido usando el Index de los Items;
la idea NYlOn - te recomiendo que uses matrices de controles y bucles, te ahorrarás cantidad de código.
Chau
Siguiendo este hilo, no he querido dejar de compartir otro código mucho más autónomo, con el cual sé que alguno que otro se animará ya a crear su propio OCX
Se usa un control Image (con Index = 0 - previamente establecido para crear un array) y un Timer.
Dim RepeatTimes&
Dim RepeatCount&
Private Sub Form_Load()
LoadAniGif App.Path & "\Ejemplo.Gif", Image1 'El Gif a reproducir en el mismo directorio del programa
End Sub
Private Sub LoadAniGif(xFile As String, xImgArray)
Dim F1, F2
Dim Image1s() As String
Dim imgHeader As String
Static buf$, picbuf$
Dim fileHeader As String
Dim imgCount
Dim i&, j&, xOff&, yOff&, TimeWait&
Dim GifEnd
GifEnd = Chr(0) & "!ù"
Timer1.Enabled = False
For i = 1 To xImgArray.Count - 1
Unload xImgArray(i)
Next i
F1 = FreeFile
On Error GoTo badFile:
Open xFile For Binary Access Read As F1
buf = String(LOF(F1), Chr(0))
Get #F1, , buf
Close F1
i = 1
imgCount = 0
j = (InStr(1, buf, GifEnd) + Len(GifEnd)) - 2
fileHeader = Left(buf, j)
i = j + 2
RepeatTimes& = Asc(Mid(fileHeader, 126, 1)) + (Asc(Mid(fileHeader, 127, 1)) * 256)
Do
imgCount = imgCount + 1
j = InStr(i, buf, GifEnd) + Len(GifEnd)
If j > Len(GifEnd) Then
F2 = FreeFile
Open "tmp.gif" For Binary As F2
picbuf = String(Len(fileHeader) + j - i, Chr(0))
picbuf = fileHeader & Mid(buf, i - 1, j - i)
Put #F2, 1, picbuf
imgHeader = Left(Mid(buf, i - 1, j - i), 16)
Close F2
TimeWait = ((Asc(Mid(imgHeader, 4, 1))) + (Asc(Mid(imgHeader, 5, 1)) * 256)) * 10
If imgCount > 1 Then
xOff = Asc(Mid(imgHeader, 9, 1)) + (Asc(Mid(imgHeader, 10, 1)) * 256)
yOff = Asc(Mid(imgHeader, 11, 1)) + (Asc(Mid(imgHeader, 12, 1)) * 2561)
Load xImgArray(imgCount - 1)
xImgArray(imgCount - 1).ZOrder 0
xImgArray(imgCount - 1).Left = xImgArray(0).Left + (xOff * 15)
xImgArray(imgCount - 1).Top = xImgArray(0).Top + (yOff * 15)
End If
xImgArray(imgCount - 1).Tag = TimeWait
xImgArray(imgCount - 1).Picture = LoadPicture("tmp.gif")
Kill ("tmp.gif")
i = j
End If
Loop Until j = Len(GifEnd)
If i < Len(buf) Then
F2 = FreeFile
Open "tmp.gif" For Binary As F2
picbuf = String(Len(fileHeader) + Len(buf) - i, Chr(0))
picbuf = fileHeader & Mid(buf, i - 1, Len(buf) - i)
Put #F2, 1, picbuf
imgHeader = Left(Mid(buf, i - 1, Len(buf) - i), 16)
Close F2
TimeWait = ((Asc(Mid(imgHeader, 4, 1))) + (Asc(Mid(imgHeader, 5, 1)) * 256)) * 10
If imgCount > 1 Then
xOff = Asc(Mid(imgHeader, 9, 1)) + (Asc(Mid(imgHeader, 10, 1)) * 256)
yOff = Asc(Mid(imgHeader, 11, 1)) + (Asc(Mid(imgHeader, 12, 1)) * 2561)
Load xImgArray(imgCount - 1)
xImgArray(imgCount - 1).ZOrder 0
xImgArray(imgCount - 1).Left = xImgArray(0).Left + (xOff * 15)
xImgArray(imgCount - 1).Top = xImgArray(0).Top + (yOff * 15)
End If
xImgArray(imgCount - 1).Tag = TimeWait
xImgArray(imgCount - 1).Picture = LoadPicture("tmp.gif")
Kill ("tmp.gif")
End If
On Error GoTo badTime
Timer1.Interval = CInt(xImgArray(0).Tag)
badTime:
Timer1.Enabled = True
Exit Sub
badFile:
MsgBox "File not found.", vbExclamation, "File Error"
End Sub
Private Sub Timer1_Timer()
For i = 0 To Image1.Count
If i = Image1.Count Then
If RepeatTimes > 0 Then
RepeatCount = RepeatCount + 1
If RepeatCount > RepeatTimes Then
Timer1.Enabled = False
Exit Sub
End If
End If
For j = 1 To Image1.Count - 1
Image1(j).Visible = False
Next j
On Error GoTo badTime
Timer1.Interval = CLng(Image1(0).Tag)
badTime:
Exit For
End If
If Image1(i).Visible = False Then
Timer1.Interval = CLng(Image1(i).Tag)
On Error GoTo badTime2
Image1(i).Visible = True
badTime2:
Exit For
End If
Next i
End Sub
Enjoy
Citar
Private Sub Timer1_Timer()
Static i
i = i + 1: If i = Image1.Count Then i = 1
Image1(0).Picture = Image1(i).Picture
End Sub
para que sirve "Static" ^^
pero si es lo que me imagino, eso cambiaria la imagen rapidisimo, y no le daria efecto al gif ...
si estoy equivocado hacemelo saber ;D
un abraz0
G0nz4
Citarpara que sirve "Static" ^^
De la Ayuda de Visual BasicCitarAdemás de un alcance, las variables tienen un tiempo de vida, el periodo de tiempo durante el cual mantienen su valor. Se preservan los valores de las variables a nivel de módulo y públicas durante el tiempo de duración de la aplicación. Sin embargo, las variables locales declaradas con Dim sólo existen mientras se ejecuta el procedimiento en el cual se han declarado. Normalmente, cuando termina la ejecución de un procedimiento, no se conservan los valores de sus variables locales y se reclama la memoria utilizada por las variables locales. La próxima vez que se ejecute el procedimiento se reinicializarán todas sus variables locales.
Sin embargo, puede preservar el valor de una variable local si hace que la variable sea estática. Utilice la palabra clave Static para declarar una o más variables dentro de un procedimiento, exactamente igual que si lo hiciera con la instrucción Dim:
Static Profundo
CHAU ;)
GRACIAZ ^_^
peor no me respondiste
Citar
si es lo que me imagino, eso cambiaria la imagen rapidisimo, y no le daria efecto al gif ...
si estoy equivocado hacemelo saber ;D
NOTA: no soy vago, jugando con la sentencia KILL elimine la ayuda del VB xDDD
Thx Again
G0nz4
oye y por que no usas flash es mas facil y mejor y el ocx ya viene en winxp profesional
Tendrá que descargarse el flash y aprender a usarle (que es dificilillo).
Además no estoy tan seguro de que el ocx del flash venga en el win xp.
Saludos ;)
Citarsi es lo que me imagino, eso cambiaria la imagen rapidisimo, y no le daria efecto al gif ...
si estoy equivocado hacemelo saber Grin
Si no te gusta el primero puedes usar el segundo, a que no está más interesante va?.. ;)
También debo aclarar que no es mio.. pero si lo se aplicar muy bien, jeje :D
Saludos.
Muchas gracias a todos por responder...no tengo ni idea de flash :P
Lo he echo por el aniGif...ha sido sencillo y rapido...
buenisimo !
che perdon x la ignorancia, pero cuando dijieron: PQ NO USAS FLASH ?
se referian a un control OCX o al Flash (ese para hacer animacione) ???
;D;D;D
jaja posta me kede con la duda xDD
un saludo
G0nz4
¿¿TODO ESO HAY K HACER PARA METER UN GIF??
buf................ xd ...................no coments...............
Y reviviste un post del 11 de septiembre para decir eso??
Y por lo menos hubieras leido todo el hilo.
'no coments...'
Cita de: NYlOn en 24 Junio 2006, 01:58 AM
Y reviviste un post del 11 de septiembre para decir eso??
Y por lo menos hubieras leido todo el hilo.
'no coments...'
yo estaba mirando el post del foro en el que te lleva a enlaces de interes... llegue a este lo leí y entonces vi la burrada que hay que hacer para añadir gifs... y nose tener k descomprimir todo el gif... aun usando ocx... no lo veo muy normal... de ahi mi no comment...