Ver la Versión Completa : Actualizar ProgressBar de un formulario desde DataModule
Jesús Pena
01-04-2007, 02:24:20
Necesito saber como realizar la actualización de una progressbar que está en un formulario desde un datamodule asociado (necesito poder acceder a los parámetros de maximo y posicion de la misma pues se actualizará desde un bucle y que se ejecute desde 1 hasta el número de registros a tratar).
Recuerdo haber visto algo al respecto por algún lado pero no lo encuentro.
Gracias.
Héctor Randolph
01-04-2007, 03:18:24
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
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.
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.
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
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
Jesús Pena
13-04-2007, 01:27:13
Problema resuelto.
Muchas Gracias.
:)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.