Ver Mensaje Individual
  #2  
Antiguo 01-04-2007
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Reputación: 20
Héctor Randolph Va por buen camino
Un posible solución es la siguiente:

Puedes crear un evento en el DataModule que se dispare cada vez que procesas un registro, en este evento puedes enviar como parámetros el total de registros y el registro actual, después asignas ese evento desde el Form para que se reflejen los cambios en tu ProgressBar.

Te dejo un código de ejemplo:

Este es el código del DataModule para crear el evento con los parámetros

Código Delphi [-]
type
   TMiEvento = procedure(Sender: TObject; RegActual, Total: Integer) of object;

Después creas un campo y una propiedad para poder asignar este evento desde otro módulo.

Código Delphi [-]
  private
    { Private declarations }
    FMiEvento: TMiEvento;//Creamos un campo
  public
    { Public declarations }
    property OnMiEvento: TMiEvento read FMiEvento write FMiEvento;
    procedure Miproceso;
  end;

Finalmente dentro de tu proceso disparas el evento cada vez que recorres un registro.

Código Delphi [-]
procedure TDataModule1.MiProceso;
var
  Total:Integer;
begin
  Table1.First;
  Total:=Table1.RecordCount;
  while not Table1.EOF do
  begin
    if Assigned(FMiEvento) then
      FMiEvento(nil,Table1.RecNo,Total);//Enviamos los parametros
    Table1.Next;
  end;
end;

Finalmente desde tu formulario asignas este evento

Código Delphi [-]
var
  Form1: TForm1;

implementation

uses
  Unit2; // Este es el que contiene el DataModule

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataModule2.OnMiEvento:=ActualizaProgreso; //Asignamos el evento que se encarga de mostrar la barra
end;

procedure TForm1.ActualizaProgreso(Sender: TObject; RegActual, Total: Integer);
begin
  ProgressBar1.Max:=Total;
  ProgressBar1.Position:=RegActual;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  DataModule2.Miproceso; //Ejecuto el proceso que está en el DataModule al pulsar un botón por ejemplo
end;

end.

Saludos
Responder Con Cita