Jump to content


Photo

Mostrar la Barra de progreso mientras se abre la tabla


  • Please log in to reply
4 replies to this topic

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 28 July 2009 - 07:24 PM

Pues eso, estoy intentando mostrar una barra de progreso mientras se abre una tabla, por ejemplo, tengo esta situación, al llamar a un form con una grilla con 7,000 registros el form aparenta estar congelado por un momento hasta que la tabla termine de abrir, por eso quiero mostrar una barra mientras se carga la tabla y cuando termine muestre el form, tengo lo siguiente:

En el OnShow del formulario a llamar:



delphi
  1. procedure TFEmpleados.FormShow(Sender: TObject);
  2. begin
  3. FProgreso := TFProgreso.Create(Self); //Es un form pequeño con un progressbar
  4. dsEmpleados.DataSet.Open;
  5. FProgreso.ProgressBar1.Max := dsEmpleados.DataSet.RecordCount;
  6. FProgreso.ShowModal;
  7. end;



en el timer de FProgreso:



delphi
  1. ProgressBar1.Position := DM.dbfEmpleados.RecNo;



Pero no me funciona, pues el form Progreso tarda en aparecer y no muestra ningún movimiento.

Saludos.

  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3283 posts
  • LocationColombia

Posted 28 July 2009 - 07:40 PM

Claro amigo enecumene, ya que el form al crearse de primero cede la carga del proceso a la tabla, por lo que este ya esta bloqueado. En este caso además tu estas usando lo siguiente:



delphi
  1. dsEmpleados.DataSet.Open;



Pero para contar el avance de los registros este otro:



delphi
  1. DM.dbfEmpleados.RecNo;



Porque no intentas algo como esto entonces en FProgreso:



delphi
  1. ProgressBar1.Position := FEmpleados.dsEmpleados.DataSet.RecNo;
  2. Application.ProcessMessages;



Quizá funcione.


Saludos!
  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 28 July 2009 - 08:22 PM

Dataset.RecNo  no te funciona  a  no ser que recorras el Dataset que no es tu caso,  aqui te coloco algo que podrí­a servir (a veces va muy rápido),  no necesita de Timer, y los valores min y max del ProgressBar son 1 y 100.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. i: Integer;
  4. begin
  5. Datset.Open;
  6. for i := 1 to Dataset.RecordCount do
  7. begin
  8.   ProgressBar.Position:= (100 * i)div Datset.RecordCount;
  9. end;
  10. end;



Otra solución es un progressbar sin fin con Timer y lo paras al mostrar el form mas o menos asi:


delphi
  1. procedure TFEmpleados.FormShow(Sender: TObject);
  2. begin
  3. FProgreso := TFProgreso.Create(Self); //Es un form pequeño con un progressbards
  4. Empleados.DataSet.Open;
  5. FProgreso.ProgressBar1.Position:= FProgreso.ProgressBar1.max;
  6. Timer1.Enabled := False;
  7. FProgreso.ShowModal;
  8. end;



y en el timer:


delphi
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. // Asigna min:= 0 y max:= 10 al progrssbar y 100 al interval del Timer para probar
  3. begin
  4. if pb.Position < pb.Max then
  5. pb.Position := pb.Position +1
  6. else
  7. pb.Position := pb.Min;
  8. end;



  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 29 July 2009 - 10:16 AM

Gracias amigos, todos me fueron útiles, pero se me olvidaba el componente de cHackAll llamado _Busy la cual realiza el cometido ;)

Saludos.
  • 0

#5 felipe

felipe

    Advanced Member

  • Administrador
  • 3283 posts
  • LocationColombia

Posted 29 July 2009 - 10:19 AM

Gracias amigos, todos me fueron útiles, pero se me olvidaba el componente de cHackAll llamado _Busy la cual realiza el cometido ;)

Saludos.


Fué lo primero que pensé ¿porque no lo usa?  ^o|

:D

Saludos!
  • 0




IP.Board spam blocked by CleanTalk.