Oder .Invalidate anstatt .Repaint bzw. .Refresh.
Repaint malt "eventuell" sofort (kommt bissl auf die Komponenten drauf an)
Invalidate sagt die Anzeige ist "ungültig" ... sie wird dann bei nächster Gelegenheit aktualisiert (Paint)
Delphi-Quellcode:
ListBox1.Repaint;
ListBox1.Repaint;
ListBox1.Repaint;
ListBox1.Repaint;
ListBox1.Repaint;
// malt 1 oder 5 Mal
ListBox1.Invalidate;
ListBox1.Invalidate;
ListBox1.Invalidate;
ListBox1.Invalidate;
ListBox1.Invalidate;
// malt anschließend nur 1 Mal
PS:
Invalidate macht ein InvalidateRect auf das ganze Control.
Beim Resize oder Scroll wird nur ein InvalidateRect auf den "neuen" Bereich ausgelöst und dann auch nur dieser Teil neu gezeichnet.