Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: BenRu en 18 Agosto 2005, 19:14 pm



Título: Gif en form
Publicado por: BenRu en 18 Agosto 2005, 19:14 pm
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?


Título: Re: Gif en form
Publicado por: Xpeed en 18 Agosto 2005, 19:51 pm
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.


Título: Re: Gif en form
Publicado por: BenRu en 18 Agosto 2005, 21:00 pm
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  ;)


Título: Re: Gif en form
Publicado por: Xpeed en 18 Agosto 2005, 21:26 pm
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.


Título: Re: Gif en form
Publicado por: BenRu en 18 Agosto 2005, 21:54 pm
Pues lo descomprimo y lo mismo en la misma carpeta y no funca... :-\


Título: Re: Gif en form
Publicado por: BenRu en 18 Agosto 2005, 22:00 pm
Ya he logrado que funcione...tienes que activarlo...

Si alguien tiene la curiosidad de como es que me lo diga  :P

Gracias Xpeed


Título: Re: Gif en form
Publicado por: NYlOn en 21 Agosto 2005, 22:43 pm
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
Código:
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-


Título: Re: Gif en form
Publicado por: Numeros en 22 Agosto 2005, 04:51 am
En Image1(1) ...hasta... Imagen1(N) para cada cuadro del Gif

Código:
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


Título: Re: Gif en form
Publicado por: Numeros en 24 Agosto 2005, 14:26 pm
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.

Código:
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


Título: Re: Gif en form
Publicado por: NYlOn en 28 Agosto 2005, 04:18 am
Citar
Código:
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


Título: Re: Gif en form
Publicado por: Numeros en 28 Agosto 2005, 05:56 am
Citar
para que sirve "Static" ^^

De la Ayuda de Visual Basic

Citar
Ademá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  ;)


Título: Re: Gif en form
Publicado por: NYlOn en 28 Agosto 2005, 08:20 am
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


Título: Re: Gif en form
Publicado por: osirisra en 28 Agosto 2005, 19:24 pm
oye y por que no usas flash es mas facil y mejor y el ocx ya viene en winxp profesional


Título: Re: Gif en form
Publicado por: programatrix en 28 Agosto 2005, 19:34 pm
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  ;)


Título: Re: Gif en form
Publicado por: Numeros en 28 Agosto 2005, 22:38 pm
Citar
si 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.


Título: Re: Gif en form
Publicado por: BenRu en 29 Agosto 2005, 04:07 am
Muchas gracias a todos por responder...no tengo ni idea de flash  :P

Lo he echo por el aniGif...ha sido sencillo y rapido...


Título: Re: Gif en form
Publicado por: NYlOn en 1 Septiembre 2005, 00:53 am
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


Título: Re: Gif en form
Publicado por: Hans el Topo en 23 Junio 2006, 21:37 pm
¿¿TODO ESO HAY K HACER PARA METER UN GIF??
buf................ xd ...................no coments...............


Título: Re: Gif en form
Publicado por: 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...'


Título: Re: Gif en form
Publicado por: Hans el Topo en 24 Junio 2006, 13:25 pm
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...