In Delphi 2010 - mit Debug-DCUs compiliert:
Delphi-Quellcode:
CheckListBox1.Style := lbVirtual;
CheckListBox1.Count := 10;
CheckListBox1.State[1] := cbChecked;
CheckListBox1.State[1] := cbChecked;
Beim ersten Aufruf/Setzen von State wird ein "Wrapper" erzeugt (ohne diesen "Wrapper" wird immer nur der Standardwert angezeigt)
Delphi-Quellcode:
function TCheckListBox.GetState(Index: Integer): TCheckBoxState;
begin
if HaveWrapper(Index) then
Result := TCheckListBoxDataWrapper(GetWrapper(Index)).State
else
Result := TCheckListBoxDataWrapper.GetDefaultState;
end;
function TCheckListBox.GetWrapper(Index: Integer): TObject;
begin
Result := ExtractWrapper(Index);
if Result = nil then
Result := CreateWrapper(Index);
end;
Nur irgendwie ist er beim 2. Aufruf wieder weg, so daß der gesetzte/geänderte Wert wieder verschwunden ist.
Dieser "Wrapper" wird in ItemData gespeichert und beim Auslesen dessen kommt NIL zurück.
(Frag mich bloß nicht nach dem Wieso.)