Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: corlo en 7 Septiembre 2020, 23:22 pm



Título: imagenes aleatorias seguidas
Publicado por: corlo en 7 Septiembre 2020, 23:22 pm
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:

Código:

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


Título: Re: imagenes aleatorias seguidas
Publicado por: Serapis en 9 Septiembre 2020, 17:27 pm
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
  1. private Lista()    as integer
  2. private NumFiles    as integer
  3. private Actual    as integer
  4.  
  5. private sub Archivos_pathchange
  6.    dim k as integer
  7.  
  8.    numfiles = archivos.listcount
  9.    redim lista(0 to numfiles-1)
  10.  
  11.    for k= 0 to numfiles-1
  12.        lista(k) = k
  13.    next
  14.  
  15.    call Barajar
  16. end sub
  17.  
  18. private sub Barajar
  19.    dim k as integer,  j as innteger, ix as integer
  20.  
  21.    for k= numfiles-1 to 1 step -1
  22.        ix = Int( k * Rnd )
  23.  
  24.        j = lista(k)
  25.        lista(k) = lista(ix)
  26.        lista(ix) = j
  27.    next
  28.  
  29.    Actual = 0
  30. end sub
  31.  
  32. private function NextImg as integer
  33.     NextImg = Actual
  34.  
  35.     Actual = (Actual+1)
  36.     if (Actual = numfiles) then call barajar
  37. end function
  38.  

Y para completar el código... hay que rehacer lo que has puesto:
Código
  1. private Ruta    as string
  2.  
  3. Private Sub Form_Load()
  4.    Ruta = (App.Path & "\imagenes\")
  5.    //archivos.pattern = tu decides que tipo de imágenes quieres...
  6.    archivos.Path = ruta
  7.    timer1.Interval = 3000
  8.    timer1.enabled = true
  9. End Sub
  10.  
  11. Private Sub Timer1_timer()
  12.    set Image1.Picture = LoadPicture(ruta & archivos.List(lista(NextImg)))
  13. End Sub
  14.  

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


Título: Re: imagenes aleatorias seguidas
Publicado por: corlo en 9 Septiembre 2020, 18:23 pm
gracias nebire

justo lo que necesitaba

problema resuelto