掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ゲージが進まない (ID:31225)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんなんでどうでしょう。 var i: Integer; SL: TStringList; begin SL := TStringList.Create; try SL.LoadFromFile('ほにゃらら'); ProgressBar1.Min := 0; ProgressBar1.Max := 100; ProgressBar1.Position := 0; for i:=0 to SL.Count-1 do begin if (i mod 100) = 0 then begin ProgressBar1.Position := (i * 100) div (SL.Count-1); Application.ProcessMessages; end; // 処理 end; ProgressBar1.Position := ProgressBar1.Max; Application.ProcessMessages; finally SL.Free; end; end; 大量にデータがある場合、Application.ProcessMessagesを挟まないと ゲージの描画が更新されずにフリーズ状態のように見えます。 だからと言って普通にループにApplication.ProcessMessagesを挟むと 今度はApplication.ProcessMessagesに時間を取られて処理完了に 時間が掛かるようになります。 上記サンプルでは100ループに一回、画面の更新が行われるようになっています。 > 標準でゲージというのが有るのでしょうか? [Samples]にあるTGaugeの事かと。 上記サンプルソースではTGaugeではなく [Common Controls]にあるTProgressBarを利用していますが。 # TGaugeへの改変は難しくないと思います。 古いDelphiでは、TGaugeのMinValue/MaxValue/Progressの型が小さく (16bit Integerだったかな?) あまり大きな値をMaxValue/Progressにセットすると ゲージが正常に進まなくなるという問題があった気がします。 # そのため、私は今でもゲージ(プログレスバー)の範囲を # 0-100固定にし、位置を100分率計算しています。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.