Visual Basic - Abrir un fichero y que funcione barra de progreso.

Life is soft - evento anual de software empresarial
 
Vista:

Abrir un fichero y que funcione barra de progreso.

Publicado por Manuel (33 intervenciones) el 27/04/2003 01:56:31
Hola, mi problema es que cuando abro un fichero en un ListBox, se muestre mientras carga una barra de progreso.
El fichero lo abro de la siguente forma:

Dim Doit As String
Dim directory$

List1.Clear
directory$ = CommonDialog1.FileTitle
Open directory$ For Input As #1

While Not EOF(1)

Input #1, Doit

List1.AddItem Doit$

Wend

Close #1

End If

Y no se que valor máximo darle, ni donde colocarla para que actue en el mismo tiempo que carga el fichero en el listbox

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Abrir un fichero y que funcione barra de progre

Publicado por Adolfo Vanegas (105 intervenciones) el 27/04/2003 05:57:50
El problemita que se te presenta aqui es que estas abriendo un archivo de texto del cual no sabes cuantos registros tiene, y esto es un elemento importante para la barra de progreso. Se me ocurre que lo unicos que puedes hacer, en este caso, es hacer un proceso que primero te lea los registros y luego con ese valor puedas mostrar la barra de progreso.

Quedaria asi:
Option Explicit

Private Sub Command1_Click()
Dim Doit As String
Dim directory$
Dim TRegistros As Long
Dim CRegistros As Long

List1.Clear
directory$ = CtrConfig.FileTitle
Open directory$ For Input As #1

'Cuentas los registros

TRegistros = 0

While Not EOF(1)

Input #1, Doit

TRegistros = TRegistros + 1

Wend

Close #1

'LLena Listbox y muestra Barra de progreso

ProgressBar1.Max = 100
ProgressBar1.Value = 0
cregistro = 0

Open directory$ For Input As #1

While Not EOF(1)

Input #1, Doit

List1.AddItem Doit$
CRegistros = CRegistros + 1

DoEvents
ProgressBar1.Value = (CRegistros / TRegistros) * 100

Wend

Close #1

Nota si no le colocas Doevents no se muestra el proceso de llenado del control listbox , eso es a tu gusto.

espero te sirva
End Sub


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un millón de gracias

Publicado por Manuel (33 intervenciones) el 27/04/2003 17:09:41
A veces el arbol no te deja ver el bosque...

Impresionante... Funcionando perfectamente

Muchísimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Abrir un fichero y que funcione barra de progre

Publicado por bla (230 intervenciones) el 27/04/2003 17:42:39
La idea es válida, pero supone tener que leer dos veces el fichero.
Mejor hacer lo siguiente
TBytes=FileLen(directory$) ' Esto no supone leer el fichero.

Open directory$ For Input As #1
list1.visible=false
While Not EOF(1)

Input #1, Doit

List1.AddItem Doit$
CBytes = CBytes + len(doit$) + 2 ' El 2 es por los caracteres vbCrLf finales de línea que no se cargan en el doit$
ProgressBar1.Value = (CBytes / TBytes) * 100
Wend
Close #1
list1.visible=true

El .visible=false es para que se carge muchísimo más rápido (si el fichero es grande, te aconsejo que lo pongas). Si queires puedes hacer list1.visible=false
list2.visible=true 'un list vacío que ocupará el lugar del otro mientras se carga
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias tambien

Publicado por Manuel (33 intervenciones) el 27/04/2003 23:53:49
Lo he probado y por supuesto funciona también, pero en ficheros muy, muy cortitos me daba un error... lo que si me ha valido ha sido lo de .visible, ahora todavía va mas rápido.

Gracias y un saludo.

PD.: ME GUARDO EL CODIGO PARA ESTUDIAR... POR SUPUESTO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar