Die Prozedur "TCustomListBox.ClearSelection" ist m.E. fehlerhaft, oder zumindest unschön formuliert.
Wenn MultiSelect True ist wird für alle Einträge Selected = False gesetzt, auch wenn Selected bereits False ist.
Das Setzen von Selected scheint ein Repaint auch dann auszulösen, wenn Selected nicht verändert wird, d.h. bei jedem "Selected:=False" wird die ListBox neu gezeichnet.
Das ist kein Problem, wenn die ListBox nur wenige Einträge enthält, ist aber lästig, wenn viele Einträge vorhanden sind.
Delphi-Quellcode:
procedure TCustomListBox.ClearSelection;
var
I: Integer;
begin
if MultiSelect then
for I := 0 to Items.Count - 1 do
Selected[I] := False
else
ItemIndex := -1;
end;
Besser wäre es so:
Delphi-Quellcode:
PROCEDURE TCustomListBox.ClearSelection;
var I:Integer;
begin
if MultiSelect then
for I:=0 to Items.Count-1 do
if Selected[I] then Selected[I]:=False
else
ItemIndex:=-1;
end;
Fragen:
Ist das bei neueren Delphi-Versionen immer noch so?
Wenn nicht, sollte ich einen Bug-Report erstellen?
Eigentlich ist es ja kein Bug, denn die Prozedur macht ja, was sie machen soll.