Gif en form

Iniciado por BenRu, 18 Agosto 2005, 19:14 PM

0 Miembros y 2 Visitantes están viendo este tema.

BenRu

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?

Xpeed

#1
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

un saludo.

BenRu

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  ;)

Xpeed

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.

BenRu

Pues lo descomprimo y lo mismo en la misma carpeta y no funca... :-\

BenRu

Ya he logrado que funcione...tienes que activarlo...

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

Gracias Xpeed

NYlOn

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-

Numeros

#7
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

Numeros

#8
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

NYlOn

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