imagenes aleatorias seguidas

Iniciado por corlo, 7 Septiembre 2020, 23:22 PM

0 Miembros y 1 Visitante están viendo este tema.

corlo

Hola soy corlo
estoy haciendo un pequeño codigo de imagenes aleatorias, que apretando un command1
me va generando una imagen aleatoria, funciona perfectamente ahora lo que quiero es
que con otro boton command2 me haga todas las imagenes aleatorias  seguidas mediante un intervalo de tiempo.
en el formulario hay :
filelistbox=archivos
image1
el codigo es el siguiente:



Private Sub Command1_Click()
Dim aleatorio As Integer
aleatorio = Int(((archivos.ListCount - 1) * -1) * Rnd + archivos.ListCount - 1)
Image1.Picture = LoadPicture(App.Path + "\imagenes\" + archivos.List(aleatorio))
End Sub

Private Sub Form_Load()
archivos.Path = App.Path + "\imagenes\"
End Sub




gracias

Serapis

#1
Simplemente añade un control 'Timer', establece el 'tiempo de espera' entre cambio de imágenes (el valor de la propiedad 'interval', refiere milisegundos). Deja el control timer desactivado, (Enabled=FALSE) y actívalo cuando cargas una carpeta dada.

Comentarios:
En el filelistbox, deberías filtrar para que contenga solo tipos de imágenes que puedes leer... (extensiones, jpg, tif, gif, bmp)...

El 'aleatorio' deja mucho que desear... es muy fácil que salgan imágenes repetidas constantemente. Hay que tomar la lista y barajarla tan pronto como se establece la ruta (evento pathchange)...

Código (vb) [Seleccionar]

private Lista()    as integer
private NumFiles    as integer
private Actual    as integer

private sub Archivos_pathchange
   dim k as integer

   numfiles = archivos.listcount
   redim lista(0 to numfiles-1)

   for k= 0 to numfiles-1
       lista(k) = k
   next

   call Barajar
end sub

private sub Barajar
   dim k as integer,  j as innteger, ix as integer

   for k= numfiles-1 to 1 step -1
       ix = Int( k * Rnd )

       j = lista(k)
       lista(k) = lista(ix)
       lista(ix) = j
   next
   
   Actual = 0
end sub

private function NextImg as integer
    NextImg = Actual

    Actual = (Actual+1)
    if (Actual = numfiles) then call barajar
end function


Y para completar el código... hay que rehacer lo que has puesto:
Código (vb) [Seleccionar]

private Ruta    as string

Private Sub Form_Load()
   Ruta = (App.Path & "\imagenes\")
   //archivos.pattern = tu decides que tipo de imágenes quieres...
   archivos.Path = ruta
   timer1.Interval = 3000
   timer1.enabled = true
End Sub

Private Sub Timer1_timer()
   set Image1.Picture = LoadPicture(ruta & archivos.List(lista(NextImg)))
End Sub


y listo... tarea completa. ahora es de verdad aleatorio y una imagen nunca se repetirá antes de haber salido todas, las demás.

corlo

gracias nebire

justo lo que necesitaba

problema resuelto