Tema destacado: [Overclocking] Récords de overclock del foro
Autor
|
Tema: Gif en form (Leído 3,670 veces)
|
BenRu
The Prodigy
Desconectado
Mensajes: 4.004
|
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?
|
|
|
|
|
En línea
|
|
|
|
Xpeed
Desconectado
Mensajes: 480
Res Publica Non Dominetur
|
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 AQUIun saludo.
|
|
|
|
« Última modificación: 18 Agosto 2005, 19:54 por Xpeed »
|
En línea
|
|
|
|
BenRu
The Prodigy
Desconectado
Mensajes: 4.004
|
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 
|
|
|
|
|
En línea
|
|
|
|
Xpeed
Desconectado
Mensajes: 480
Res Publica Non Dominetur
|
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.
|
|
|
|
|
En línea
|
|
|
|
BenRu
The Prodigy
Desconectado
Mensajes: 4.004
|
Pues lo descomprimo y lo mismo en la misma carpeta y no funca... 
|
|
|
|
|
En línea
|
|
|
|
BenRu
The Prodigy
Desconectado
Mensajes: 4.004
|
Ya he logrado que funcione...tienes que activarlo... Si alguien tiene la curiosidad de como es que me lo diga  Gracias Xpeed
|
|
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
si no keres usar un OCX pode hacer lo siguiente (es medio complicado, te tiro la idea nomas :  ) 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 línea
|
|
|
|
Numeros
Desconectado
Mensajes: 110
|
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
|
|
|
|
« Última modificación: 22 Agosto 2005, 06:37 por Numeros »
|
En línea
|
|
|
|
Numeros
Desconectado
Mensajes: 110
|
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 OCXSe 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
|
|
|
|
« Última modificación: 24 Agosto 2005, 14:47 por Numeros »
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
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  un abraz0 G0nz4
|
|
|
|
|
En línea
|
|
|
|
Numeros
Desconectado
Mensajes: 110
|
para que sirve "Static" ^^
De la Ayuda de Visual BasicAdemá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 
|
|
|
|
« Última modificación: 28 Agosto 2005, 06:07 por Numeros »
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
GRACIAZ ^_^ peor no me respondiste si es lo que me imagino, eso cambiaria la imagen rapidisimo, y no le daria efecto al gif ... si estoy equivocado hacemelo saber  NOTA: no soy vago, jugando con la sentencia KILL elimine la ayuda del VB xDDD Thx Again G0nz4
|
|
|
|
|
En línea
|
|
|
|
osirisra
Desconectado
Mensajes: 20
|
oye y por que no usas flash es mas facil y mejor y el ocx ya viene en winxp profesional
|
|
|
|
|
En línea
|
|
|
|
|
Rey11
|
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 
|
|
|
|
|
En línea
|
|
|
|
Numeros
Desconectado
Mensajes: 110
|
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  Saludos.
|
|
|
|
« Última modificación: 28 Agosto 2005, 22:40 por Numeros »
|
En línea
|
|
|
|
|
|