私は単純なアプリケーションを持っています。 1つのフォームと1つのDataModule。 私はDataModuleでいくつかのプロセスを持っており、UIにプログレスバーを使って進行状況を表示したいと考えています。Uiで進行状況を表示
どのような方法が最適ですか?
私は単純なアプリケーションを持っています。 1つのフォームと1つのDataModule。 私はDataModuleでいくつかのプロセスを持っており、UIにプログレスバーを使って進行状況を表示したいと考えています。Uiで進行状況を表示
どのような方法が最適ですか?
ベスト・アプローチは、データ・モジュールのイベントを定義してから、そのイベントのハンドラーをフォームに実装し、それをデータ・モジュール・イベントに割り当てます。 これで、プロセス内でイベントを呼び出し、イベントハンドラを呼び出します。このような
何か:
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;
これは、データモジュールで起こっているまさに、依存しますか? –
@ JerryDodge、私はデータを更新するためにいくつかのループを持っています。 –
どの基準で客観的に「最高」を定義しますか?一方-1。最良のアプローチは、他のものと同等ですが、gui(VCL)スレッドではなく、ymmvでdatamoduleプロセスを実行することです。 – MartynA