Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Uso de ProgressBar
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Uso de ProgressBar 
 
Admin: Tema separado. Antes era "Otra entrada de Drag&Drop"

Nada, no hay manera de hacer funcionar el progressbar. Y mira que lo han hecho sencillo, pues por más que miro no sé dónde puede estar el problema.

Bajo el botón he creado un progressbar y al querer actualizar su valor con ProgressBar1.Value no ocurre nada, solo me sale cuando ha terminado el bucle y aparece un 1.

Public Sub boton_Drop()

  Dim a As String
  Dim lista_de_rutas As String[]
  Dim numero_de_archivos As Integer
  Dim linea As String
  Dim extension As String
  Dim nombre As String

  
  
  a = Drag.Paste("text/uri-list") ' limitamos el tipo de los datos pegados
  lista_de_rutas = Split(a, gb.CrLf, "", True) ' cargamos la lista de rutas en un array b
                                  ' escapando las terminaciones de línea
  a = Null  ' reutilizamos la variable "a"
  numero_de_archivos = 0
  numero_de_archivos = lista_de_rutas.Count
  Print numero_de_archivos & " a procesar"
  
  For Each a In lista_de_rutas
    a = Right$(a, -7) ' quitamos "file://"
    'extension = Right$(a, 4) 'conseguimos la extensión
    nombre = Left$(a, -4) ' conseguimos el nombre
    
    a = URLDecode(a)  ' descodificamos las cadenas
    Print a
    'Desktop.Open(a)   ' para probar, abrimos cada tipo de fichero con la aplicación correspondiente
    Exec ["convert", a, nombre & ".jpg"]  ' ejecutamos para convertir de formato
    ProgressBar1.Value += 1 / numero_de_archivos
    Print ProgressBar1.Value
    Sleep 1
    
  Next
 

 



 
geaplanet - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso de ProgressBar 
 
Creo que hay algún problema de tipos de datos porque me he fijado en que al imprimirse el valor del ProgressBar me aparece (si arrastro cuatro archivos): 0,25 0,50 0,75 1
Lo único que entiende el progressbar es el 1 y los demás los ignora porque me parece  que espera en su lugar: 0.25 0.50 0.75

¿A qué se debe que la división me dé los valores con comas en lugar de con puntos?


REEDITO: la cosa no cambia  si  numero_de_archivos lo defino como Single.
Ni tampoco si pongo 1.0/CSingle(numero_de_archivos)

REEDITO DE NUEVO: No creo que sea por eso porque si coloco esto en el bucle  FOR me muestra también el último  valor pero no los intermedios.
    Sleep 1
    ProgressBar1.Value = 0.25
    Sleep 1
    ProgressBar1.Value = 0.50
    Sleep 1
    ProgressBar1.Value = 0.75
 


Ups! Me acabo de dar cuenta de que este problema debería estar en otro hilo.  
 



 
última edición por geaplanet el Viernes, 02 Diciembre 2011, 11:10; editado 5 veces 
geaplanet - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso de ProgressBar 
 
Hola

La barra de progreso entiende valores float entre 0 y 1, por lo que el valor que le pasas debe ser el dividendo de 1. El uso de Sleep en este caso no está indicado, usa mejor algo como Wait 0.5 por ejemplo.

Lo que está claro es que si sólo arrastras cuatro archivos, únicamente obtendrás 4 pasos en la barra con los valores que has indicado ( 0,25 - 0,50 - 0,75 - 1 ) y permanecerán visibles mientras dure tu proceso externo "convert". Luego el error que veo es que sumas valores a la barra, cuando lo que debes hacer es restar 1 al número de archivos que quedan por procesar dentro del bucle for..each.

En lugar de esto:

ProgressBar1.Value += 1 / numero_de_archivos


Deberías de hacer esto:


ProgressBar1.Value = 1 / (numero_de_archivos -1)

 


Aunque cuando 'numero_de_archivos' llegue a 1, tendremos el típico error de división por 0, así que tendremos que esquivar esto de algún modo:

numero_de_archivos -= 1
If numero_de_archivos > 0 then
    ProgressBar1.Value = 1 / numero_de_archivos
Else
    ProgressBar1.Value = 1
EndIf
 



Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De ProgressBar 
 
Gracias de nuevo por el dato. Te cuento lo que ha ocurrido.

Puse lo que comentaste y funcionó a la primera. Pero en realidad tendría que dar igual restarle a 1 o añadirle hasta llegar a 1, el efecto debería ser el mismo, así que probé lo que comentaste de cambiar el sleep por el wait y ahí era donde estaba el problema.

Total, que funciona también poniendo:

ProgressBar1.Value += 1 / numero_de_archivos
Wait 0.5


Y no surge el problema de la división por cero porque en realidad solo hemos dividido el 1 en trozos y los vamos sumando en cada vuelta del bucle.

Creo que con esto está todo medio solucionado, voy a darle forma a la interfaz ¿os importa que vaya subiendo lo que vaya saliendo?
 



 
última edición por geaplanet el Sabado, 03 Diciembre 2011, 00:28; editado 1 vez 
geaplanet - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron