掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プログレスバーを出したい (ID:1587)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
クラスのメソッドなんですね。 なら、イベントを作ってしまえば、外部への依存がなくなるので よりベターですね。 Uses節に追加する必要もないし、表示先をProgressBar以外に変更する こともできるようになります。 サンプル type TOutputData = class(TObject) private { Private 宣言 } FCount: integer; //処理回数 FPosition: integer; //現在の処理位置 FOnStep: TNotifyEvent; procedure Step; public { Public 宣言 } function OutputData: Boolean; property Count: Integer read FCount write FCount; property Position: Integer read FPosition; property OnStep: TNotifyEvent read FOnStep write FOnStep; end; implementation {$R *.DFM} procedure TOutputData.Step; begin if Assigned(FOnStep) then FOnStep(Self); end; function TOutputData.OutputData: Boolean; var i: integer; begin Result := False; FPosition := 0; for i := 1 to FCount do begin Sleep(100); //処理 FPosition := i; Step; end; Result := True; end; 呼出側 type TForm1 = class(TForm) ・・・・・ private { Private 宣言 } procedure OutPutDataStep(Sender: TObject); ・・・・・・ //onStep のイベントハンドラ Label1 と ProgressBar1 に経過表示 procedure TForm1.OutPutDataStep(Sender: TObject); begin with TOutPutData(Sender) do Label1.Caption := Format('%d/%d',[Position, Count]); Label1.Update; ProgressBar1.StepIt; end; procedure TForm1.Button1Click(Sender: TObject); var OutPutData: TOutPutData; begin OutPutData := TOutPutData.Create; try OutPutData.Count := 100; ProgressBar1.Max := OutPutData.Count; ProgressBar1.Min := 0; ProgressBar1.Step := 1; OutPutData.OnStep := OutPutDataStep; OutPutData.OutPutData; finally OutPutData.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.