プログレスバーの表示が遅かったり、ちゃんと描画されないのを修正するユニットです。
Download: http://ht-deko.minim.ne.jp/software/uprogressbarfix_100.zip
このユニットはハラヘッタウェアとなっています。
http://ht-deko.minim.ne.jp/delphiforum/harahettaware/
遅い理由 (1):
Vista 以降ではアニメーション処理が行われている。
遅い理由 (2):
同じ値をセットしても再描画されてしまう。
正しく描画されない理由:
アニメーション処理が開始 (終了ではない) された時点で処理が戻ってくるから。
回避ロジックの解説:
遅い件は同じ値がセットされても描画されないように細工してあります。正しく描画されない件ですが、アニメーションが走るのは値がプラス方向に増えた時だけで、マイナス方向だとアニメーションなしで即描画される事を利用しています。
- 実際の値+1 をセット (アニメーション開始)
- 実際の値をセット (アニメーションをキャンセルして即描画)
こんな感じです。値セットの処理が単純計算で二倍になるのでそれ相当に遅いですが、百分率セットの手法を使えば ProgressBar の描画コストを最小限に抑える事ができます。
See Also:
[Disabling .NET progressbar animation when changing value? (Stack Overflow)]
http://stackoverflow.com/questions/5332616/disabling-net-progressbar-animation-when-changing-value
|