我有一个简单的应用程序。一个表单和一个DataModule。 我在DataModule中有一些进程,并希望在UI中显示进度(使用进度条)。
最好的方法是什么?
答案 0 :(得分:3)
最好的方法是在数据模块上定义一个Event,然后在表单中为事件实现一个处理程序,并将其分配给datamodule事件。 然后,在您的过程中,您调用事件,从而调用事件处理程序。
这样的事情:
type
TMyProgressEvent = procedure (Position, TotalSteps: Integer; Msg: string) of object
TMyDM = class
private
FOnProgress: TMyProgressEvent;
....
....
public
procedure UpdateCustomerOrders;
property OnProgress: TMyProgressEvent read FOnProgress write FOnProgress;
end
TMyForm = class
....
....
// you can change the position or progress bar here
// or if you want to log
procedure MyFormProress(Position, TotalSteps: Integer; Msg: string);
end
您的TMyDM.UpdateCustomerOrders可能如下所示:
procedure TMyDM.UpdateCustomerOrders()
begin
for I = 1 to 10 do
begin
...
... you are processing something
...
//call event like this
FOnProgress(I, 12, 'looping');
end;
.... another process here
FOnProgress(11, 12, 'another process');
.... one more process here
FOnProgress(12, 12, 'process finished');
end;