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
FMiEvento: TMiEvento; public
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); Table1.Next;
end;
end;
Finalmente desde tu formulario asignas este evento
Código Delphi
[-]
var
Form1: TForm1;
implementation
uses
Unit2;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DataModule2.OnMiEvento:=ActualizaProgreso; 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; end;
end.
Saludos