Ver Mensaje Individual
  #3  
Antiguo 11-10-2015
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 193
Reputación: 21
muli Va por buen camino
No consigo que avance la barra de progreso.

Este es el código que uso después de visionar diferentes paginas de creación de threads, pero la barra de progreso no avanza, yo lo que quiero es que avance mientras no termina de abrirse la fuente de datos, para que el usuario no crea que la aplicación ha quedado colgada. También pensé en realizar el hilo con la fuente de datos, pero al terminar el hilo pierdo toda la referencia a los datos, por lo que no me sirve. Estoy trabajando con Delphi xe6 y para android. Si en lugar de una barra de progreso se tiene que hacer con una animación, me da igual, el caso es que la aplicación realice algo mientras abre los datos, tampoco son muchos registros, una vez abierta la fuente de datos se mueven perfectamente, incluso si hago un update de un registro es instantáneo.

Código Delphi [-]
// Declaro thread
THilo = class(TThread)
  Progreso: TProgressBar;
  procedure Execute; override;
  procedure ActualizarProgreso;
end;

  Hilo1: THilo; // variable global o pública
  Avance : Integer;

Implementation

procedure THilo.ActualizarProgreso;
begin
  Avance:=Avance+1;
  Progreso.Value:=Avance;
  if Avance>100 then
  Begin
    Avance:=0;
  End;
end;

procedure THilo.Execute;
begin
  inherited;
  FreeOnTerminate := True;
  while not Terminated do
  begin
    Synchronize(ActualizarProgreso);
  end;
end;

// Hasta aquí tengo los procedimientos del thread.
// Luego en el procedimiento de abrir los datos tengo esto.
Procedure TForm1.AbrirDatos.
Begin
    ProgressBar1.Value:=0;  // Inicio la barra de progreso.
    ProgressBar1.Visible:=True;
    Avance:=0;

    Hilo1 := THilo.Create(True);  // Creo hilo de ejecución.
    Hilo1.Progreso := ProgressBar1;
    Hilo1.Resume;
// Abro datos. Omito campos para hacerlo mas legible.
    Query1.Close;
    Query1.SQL.Clear;
    Query1.Connection:=FdConnection1;
    Query1.SQL.Add('Select *  From Registros Where Actual=0');
    Query1.SQL.Add('Order By Direccion');
    if not Query1.Prepared then Query1.Prepare;
    Query1.Open;
// Finalizo thread.
  Hilo1.Terminate;
  FreeAndNil( Hilo1 );
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita