Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Progressbar no responde (https://www.clubdelphi.com/foros/showthread.php?t=69307)

antigrondona 09-08-2010 18:15:14

Progressbar no responde
 
Hola amigos, tgo un formulario que carga una serie de consultas y como se ponen un poco pesadas, decidi poner una ventanita que muestre una barra de progreso. Lo que hago es abrir la ventanita con la barra y luego el formulario con las consultasCódigo Delphi [-]formProgeso.show; formConsultas.show

El problema es que la barra no se llena (está chequeada porque si no abro el form de consultas sí lo hace). Alguna vez hice algo en VB6 y había que poner la directiva doevents para que llene la barra y no pase directamente a abrir el otro formulario. Hay algo parecido en delphi o qué debería hacer?
Gracias.

afunez2007 09-08-2010 18:33:25

Bueno si pusieras un poco de codigo de lo que estas haciendo podriamos indicarte que es lo que pasa, pero para que te hagas algunas ideas prueba lo siguiente:

Imagino que la ventana de consultas es la que las ejecuta y la de progreso solo debe mostrar el avance
Código Delphi [-]
Qry1.ExecSql;
FormProgreso.ProgressBar1.Position:=ProgressBar1.Position+1;
Application.ProcessMessages;

Qry2.ExecSql;
FormProgreso.ProgressBar1.Position:=ProgressBar1.Position+1;
Application.ProcessMessages;

Qry3.ExecSql;
 FormProgreso.ProgressBar1.Position:=ProgressBar1.Position+1;
 Application.ProcessMessages;

///Etc..

Espero estas ideas te sirvan

Saludos

AzidRain 09-08-2010 20:28:20

Para usar un progressbar hay que tener en cuenta que necesitas:

1.- Contar con un valor que se vaya incrementando conforme algo suceda en el proceso que quieres mostrar (número de registros, segundos, minutos, intentos, pasos de un proceso, etc.) Y esta valor debe ser finito.

2.- Necesitas tener acceso a una parte de tu proceso donde "avance" el contador para poder hacer el refresco correspondiente en el progressbar.

3.- En consultas sql y similares no se cumple ninguna de las 2 anteriores por lo que no puedes utilizarlo ya que al momento de lanzar la consulta tu ya no tienes control sobre el proceso que se realiza en el servidor de BD, es más ni siquiera sabemos cuanto tiempo durará o cuantos registros se leerán.

Puedes usar el progressbar en modo "marquee" que es en donde una barrita verde va y viene indicando que se está haciendo algo o bien abrir un hilo de ejecución adicional para mostrar una animación o algo así. Si buscas por los foros verás que ya se ha tratado el tema con muchas opciones de solución.

antigrondona 09-08-2010 23:29:12

No puse código porque no hay problemas con la barra en sí, la ventana que contiene la barra funciona bién, el progreso se muestra. El problema es que al realizar 2 acciones secuencialmente, una para abrir la ventana con el progreso y luego el formulario con las consultas, es como que la ventana de progreso pierde el control y pasa a ejecutar las consultas, en consecuencia la barra de progreso no se llena. El código es sencillo, no pongo el código de la ventana de progreso ni el del formulario de consulta porque estos no tienen problemas, lo que hago es lo siguiente:
Código Delphi [-]
formProgreso.show {al mostrarse debería llenarse (reitero, aquí no lo hace y ese es el problema, pero he probado sin abrir el formConsultas y si funciona)}
formConsultas.show; {al mostrarse ejecuta las consultas}
formProgreso.close; {se cierra cuando las consultas han finalizado}

afunez2007 09-08-2010 23:45:02

Pones muy poco codigo, no logro comprender todo el entorno de lo que estas haciendo, deberias de pegarnos aqui la secuencia de los procedures que ejecutas

Saludos

AzidRain 10-08-2010 01:30:37

Pues precisamente lo que te mencionaba, llega el momento en que ya no tienes control del proceso de consultas que es lo que está pasando. Revisa mi post y verás.

antigrondona 10-08-2010 15:33:07

Gracias por la ayuda amigos. Llegué a la solución invocando las consultas dentro de la barra de progreso, cada vez que hace una consulta llena la barra proporcionalmente, de esta manera el control está sobre la barra y cuando finaliza las consultas abre el formulario con los datos cargados.
Gracias nuevamente.


La franja horaria es GMT +2. Ahora son las 00:12:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi