2016-03-25 23 views
-6

私は単純なアプリケーションを持っています。 1つのフォームと1つのDataModule。 私はDataModuleでいくつかのプロセスを持っており、UIにプログレスバーを使って進行状況を表示したいと考えています。Uiで進行状況を表示

どのような方法が最適ですか?

+0

これは、データモジュールで起こっているまさに、依存しますか? –

+0

@ JerryDodge、私はデータを更新するためにいくつかのループを持っています。 –

+0

どの基準で客観的に「最高」を定義しますか?一方-1。最良のアプローチは、他のものと同等ですが、gui(VCL)スレッドではなく、ymmvでdatamoduleプロセスを実行することです。 – MartynA

答えて

3

ベスト・アプローチは、データ・モジュールのイベントを定義してから、そのイベントのハンドラーをフォームに実装し、それをデータ・モジュール・イベントに割り当てます。 これで、プロセス内でイベントを呼び出し、イベントハンドラを呼び出します。このような

何か:

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; 
+0

これはqに答えていないようです。それは、データモジュール上の何かがイベントを生成することを前提としていますが、それを行う方法はOPが尋ねているようです。 – MartynA

+0

@MartynAこのアプローチでは、DM(データモジュール)は、イベントを呼び出します。イベントはフォームのメソッドによって割り当てられます。 –

+0

はい、もちろん、私はそれを理解しています。しかし、データモジュールがいつイベントを呼び出すかを決定するのは何ですか? – MartynA

関連する問題