Da nimm CheckListBox.Checked[n] := CheckedMask[n];
Dein Aufruf über items[].checked löst ein Neuzeichnen aus, bin ich fast fest von überzeugt.
Sorry, das war nur ein Tippfehler, items[].checked gibt es gar nicht, verwende natürlich CheckListBox.Checked. Wird meiner Meinung nach trotzdem neugezeichnet. Ich bin einen Schritt weiter. Das Parent der CheckListBox hat die Eigenschaft Doublebuffered auf true gesetzt. Entfernt man diese Option, wird das Verhalten der CheckListBox deutlich schneller. s. Anhang mit langsamer Version.
Das ist so schon mal besser, ich könnte mir aber vorstellen, dass es bei Fällen mit mehr als 150 Einträgen immer noch ein ähnliches Problem geben könnte. Aber vermutlich gibts hier keine bessere Möglichkeit, als alle Checkboxen einzeln zu setzen.
Zitat von
Uwe Raabe:
Das Neuzeichnen wird in TCheckListBox.SetChecked ausgelöst.
Oder reden wir hier nicht über
VCL?
TCheckListBox.SetChecked kennt mein Delphi XE2 (noch) nicht? Wir reden über
VCL.