これらの 3 つの方法のどれが自分に最も適しているかわかりません。それらはすべて私のために働いています。Refresh、Update、Repaintの違いを知っている人はいますか?
3 に答える
オンラインドキュメントによると:
更新-画面上のコントロールを再描画します。
すぐにコントロールを再描画するには、Refreshメソッドを呼び出します。RefreshはRepaintメソッドを呼び出します。RefreshメソッドとRepaintメソッドを同じ意味で使用します。
再描画-コントロールに画面上の画像を再描画させます。
Repaintを呼び出して、コントロールに画像をすぐに再描画させます。ControlStyleプロパティにcsOpaqueが含まれている場合、コントロールはそれ自体を直接ペイントします。それ以外の場合、RepaintメソッドはInvalidateメソッドを呼び出し、次にUpdateメソッドを呼び出して、コントロールの下にあるコントロールの表示されている部分も再描画されます。
更新-保留中のペイントメッセージをすぐに処理します。
Updateを呼び出して、おそらく時間のかかる処理が行われる前に、コントロールを強制的に再描画します。Updateを使用して、Windowsペイントメッセージの到着を待つことができないユーザーに即座にフィードバックを提供します。
更新によってコントロールが無効になることはありませんが、すでに無効になっている領域を強制的に再描画するだけです。代わりにRepaintを呼び出して、コントロールも無効にします。
あなたの質問はすでに答えられていますが、良いパフォーマンスとより少ないちらつきが必要な場合は、代わりにInvalidateを呼び出す必要があります。これにより、Windowsはペイントプロセスを最適化できます。
無効化-コントロールを完全に再描画します。
コントロール全体を再描画する必要がある場合は、Invalidateを使用します。コントロール内の複数の領域を再描画する必要がある場合、Invalidateを使用すると、ウィンドウ全体が1回のパスで再描画され、冗長な再描画によって引き起こされるちらつきが回避されます。コントロールが実際に再描画される前にInvalidateを複数回呼び出しても、パフォーマンスが低下することはありません。
古い(CBuilder 6)VCLリファレンスによると:
Invalidate "Invalidate は、そのサーフェス全体を再描画する必要があることをコントロールに通知します。Invalidate を呼び出すと、一連の部分的な再描画によって引き起こされるちらつきを防ぐことができます。コントロールが実際に再描画される前に Invalidate を複数回呼び出しても、パフォーマンスが低下することはありません".
コントロールが更新されるまで、実際の再描画は行われません。すぐに再描画を強制するには、代わりに Repaint を呼び出します。
「 TWinControl ::Repaint は Invalidate メソッドを呼び出し、次に Update メソッドを呼び出してコントロールを再描画します」(わずかな言い換え)。
(悲しいことに、古いリファレンスは、私が持っている新しいリファレンス (CBuilder 2007) よりも優れており、より完全です。