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 originalPrivate Sub Timer1_Timer()
On Error GoTo Timer1_TimerError
' imgcnt contiene el numero de index del control image que vamos a mostrar.
' cada vez que entramos en este timer se incrementa el contador
ImgCnt = ImgCnt + 1
'y así mostramos una imagen diferente a la actual
Image1(ImgCnt).Visible = True
' y fijamos el tiempo que se tiene que esperar antes de volver a entrar a este timer para mostrar otra imagen.
Timer1.Interval = CInt(Image1(ImgCnt).Tag)
' si es la primera imagen del gif
If ImgCnt = 0 Then
' ocultamos la ultima imagen de la matriz
Image1(MaxCnt).Visible = False
' ahora se me ocurre: si solo hay una imagen [image(0)] en el gif ¿que sucedera? se ocultará siempre, ¿no?
' 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.
Else
' si no es la primera ocultamos la anterior
Image1(ImgCnt - 1).Visible = False
' si hemos llegado a la última imagen del gif
If ImgCnt = MaxCnt Then
'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
ImgCnt = -1
' 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.
' si este valor es 0 significa que se repite la animación indefinidamente
If NumberOfTimesToRepeatSequence = 0 Then
' en ese caso se deja un poco de tiempo de proceso para refrescar la imagen y tal
DoEvents
Else
' si hay un límite de repeticiones se lleva la cuenta
RepeatedCount = RepeatedCount + 1
' y si se supera se detiene el timer para finalizar la animación
If RepeatedCount > NumberOfTimesToRepeatSequence Then Timer1.Enabled = False
End If
End If
End If
Exit Sub
Timer1_TimerError:
MsgBox Err.Description
End Sub
Saludos by PKJ