Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas al mostrar el progreso con TGauge (https://www.clubdelphi.com/foros/showthread.php?t=36903)

Ledian_Fdez 27-10-2006 16:45:07

Problemas al mostrar el progreso con TGauge
 
Dos inquitudes

Holas amigos de este foros
Les traigo dos interrogante, les explico:

Tengo en un Tform
- 1 TADOQuery
- 1 TGauge
- 1 TLabel
- 1 TBitBtn

Quiero que a medida que valla recorriendo la tabla, se me valla mostrando en el TLabel el contenido del campo Exp y que me muestre el progreso en el TGauge.

Les muestro el código

Código Delphi [-]
procedure TEstadoForm.BitBtn1Click(Sender: TObject);
var
 Prog : Integer;
begin
    ADOQuery1.Open;
 
{1} Label1.Caption := 'Procesando ...';
{2} Prog := trunc(100 / ADOQuery1.RecordCount);

    ADOQuery1.First;
    While not(ADOQuery1.Eof) do
       begin
        ...
{3}     Label1.Caption := 'Expediente ' + ADOQuery1Exp.AsString;
        Gauge1.Progress := Gauge1.Progress + Prog;
        ...  
        ADOQuery1.Next;
       end;
    Gauge1.Progress := 100;
    Label1.Caption := 'Completado';

end;
Inquietudes

1ro - Al recorrer la tabla no me actualiza el valor del caption del label1, sino que se queda con el que tenía en tiempo de diseño, esto ocurre hasta que no sale del bucle While. (ver en el código {1}, {3})
2do - Cuando el ADOQuery1.RecordCount > 100 la variable prog = 0 y no veo el progreso del Gauge; (ver en el código {2})

Alguien podría ayudarme !!!

Gracias
Saludos Ledian

Lepe 27-10-2006 16:56:37

Código Delphi [-]
procedure TEstadoForm.BitBtn1Click(Sender: TObject);
begin
    ADOQuery1.Open;
 
{1} Label1.Caption := 'Procesando ...';
      ProgressBar1.Max := Adoquery1.RecordCount; // nos quitamos el problema del número de registros.

    ADOQuery1.First;
    While not(ADOQuery1.Eof) do
       begin
        ...

{3}     Label1.Caption := 'Expediente ' + ADOQuery1Exp.AsString;
         Label1.Update; // forzamos un pintado del label
         ProgressBar1.StepIt; // aumentamos en uno
        ...  
        ADOQuery1.Next;
       end;
    ProgressBar1.Position := ProgressBar1.Max;
    Label1.Caption := 'Completado';

end;
Como ves uso un ProgressBar, ya que tiene el método StepIt y ahorramos la variable Prog.
Cita:

Alguien podría ayudarme !!!
Ledian
Espero que sí ;)

Saludos

marcoszorrilla 27-10-2006 16:59:13

Código Delphi [-]
procedure TEstadoForm.BitBtn1Click(Sender: TObject);
begin
    ADOQuery1.Open;
 
{1} Label1.Caption := 'Procesando ...';
      ProgressBar1.Max := Adoquery1.RecordCount; // nos quitamos el problema del número de registros.
    Application.ProcessMessages;
    ADOQuery1.First;
    While not(ADOQuery1.Eof) do
       begin
        ...

{3}     Label1.Caption := 'Expediente ' + ADOQuery1Exp.AsString;
         Label1.Update; // forzamos un pintado del label
         ProgressBar1.StepIt; // aumentamos en uno
        ...  
        ADOQuery1.Next;
       end;
    ProgressBar1.Position := ProgressBar1.Max;
    Label1.Caption := 'Completado';

end;
Yo solamente le añadiria lo que queda en negrita para que se actualice convenientemente la barra de progreso.

Ledian_Fdez 27-10-2006 17:21:06

Aun mas
 
Amigos todo va muy bien y me funciona de maravilla.
Muchas gracias por todo.

Pero ahora como podría quitarle al TGauge el signo de %.
Supongamos que mi tabla tenga 500 registros
En el progreso vemos --> 45% .. 346% .. 500%
quisiera ver --> 45 .. 346 .. 500

Saludos Ledian.

Lepe 27-10-2006 18:47:37

Por eso mismo uso un TProgressBar, así puedes situar un Label encima y transparente con el texto que quieras.

Para Marcos:
Pensé en el Application.ProcessMessages, pero, ralentiza el bucle, por eso opté por el Update. Creo que funciona y no requiere mirar la cola de mensajes.

Saludos.

marcoszorrilla 27-10-2006 19:06:22

Cita:

Para Marcos:
Pensé en el Application.ProcessMessages, pero, ralentiza el bucle, por eso opté por el Update. Creo que funciona y no requiere mirar la cola de mensajes.
Tienes razón Lepe, con el Update funciona y solamente se preocupa de actualizar el componente Tlabel, lo cual ralentiza el mínimo posible.


La franja horaria es GMT +2. Ahora son las 03:30:51.

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