|
Página 1 de 1
|
Autor |
Mensaje |
geaplanet
Programador
Registrado: Febrero 2010
Mensajes: 102
Edad: 43
|
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
|
#1 Viernes, 02 Diciembre 2011, 10:45 |
|
|
geaplanet
Programador
Registrado: Febrero 2010
Mensajes: 102
Edad: 43
|
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
|
#2 Viernes, 02 Diciembre 2011, 10:53 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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"
|
#3 Viernes, 02 Diciembre 2011, 20:55 |
|
|
geaplanet
Programador
Registrado: Febrero 2010
Mensajes: 102
Edad: 43
|
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
|
#4 Sabado, 03 Diciembre 2011, 00:28 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|