Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/11/2009, 04:23
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 10 meses
Puntos: 29
Respuesta: Animación gif en una aplicación

Voy a intentar explicar yo mismo el funcionamiento del código que mostré anteriormente, al menos lo que crea necesario, para quien no se aclare.

Como mi inglés es muy básico no puedo limitarme a traducirlo bién.

Para calentar comenzaré por el timer que es facilito. Para la sub más gorda necesitaré tiempo.

Código :
Ver original
  1. Private Sub Timer1_Timer()
  2.  
  3. On Error GoTo Timer1_TimerError
  4.  
  5. ' imgcnt contiene el numero de index del control image que vamos a mostrar.
  6. ' cada vez que entramos en este timer se incrementa el contador
  7. ImgCnt = ImgCnt + 1
  8. 'y así mostramos una imagen diferente a la actual
  9. Image1(ImgCnt).Visible = True
  10. ' y fijamos el tiempo que se tiene que esperar antes de volver a entrar a este timer para mostrar otra imagen.
  11. Timer1.Interval = CInt(Image1(ImgCnt).Tag)
  12.  
  13. ' si es la primera imagen del gif
  14. If ImgCnt = 0 Then
  15.  
  16. ' ocultamos la ultima imagen de la matriz
  17.   Image1(MaxCnt).Visible = False
  18.  
  19. ' ahora se me ocurre: si solo hay una imagen [image(0)] en el gif ¿que sucedera? se ocultará siempre, ¿no?
  20. ' asi de primeras creo que se generará una animación con los images (0) y (1), y dará error al intentar mostrar image(1) si no existe. Si existe y está vacio o no da error solo notaremos quizá un parpadeo.
  21.  
  22. Else
  23.  
  24.   ' si no es la primera ocultamos la anterior
  25.   Image1(ImgCnt - 1).Visible = False
  26.  
  27.   ' si hemos llegado a la última imagen del gif
  28.   If ImgCnt = MaxCnt Then
  29.  
  30.     'restablecer el contador a antes del primer elemento ya que lo primero que hacemos cuando entramos en este subprograma es incrementar el contador de elemento
  31.     ImgCnt = -1
  32.   ' Nota: si miramos la sub DecodeGif veremos que hay un fallo, ya que se inicializa la variable ImgCnt con valor 0 en lugar de con valor -1, lo que hace que la primera vez que entramos al timer no se muestra la imagen 0, sino la imagen 1, saltandonos un fotograma.
  33.    
  34.     ' si este valor es 0 significa que se repite la animación indefinidamente
  35.     If NumberOfTimesToRepeatSequence = 0 Then
  36.       ' en ese caso se deja un poco de tiempo de proceso para refrescar la imagen y tal
  37.       DoEvents
  38.  
  39.     Else
  40.  
  41.       ' si hay un límite de repeticiones se lleva la cuenta
  42.       RepeatedCount = RepeatedCount + 1
  43.       ' y si se supera se detiene el timer para finalizar la animación
  44.       If RepeatedCount > NumberOfTimesToRepeatSequence Then Timer1.Enabled = False
  45.    
  46.     End If
  47.  
  48.   End If
  49. End If
  50. Exit Sub
  51.  
  52. Timer1_TimerError:
  53. MsgBox Err.Description
  54.  
  55. End Sub

Saludos by PKJ
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 15/11/2009 a las 04:33