Guten Morgen,
da eine CheckListBox bei angemessener Benutzung keine Unzahl an Einträgen hat, würde ich den Zustand der Checkboxen als einen einzigen Wert speichern. Denkbar sind bis zu 32 Werte in einem DWORD - oder auch ein String.
Delphi-Quellcode:
function GetCheckedStr(clb: TCheckListBox): String;
var
i: Integer;
begin
SetLength(Result, clb.Count);
for i := 0 to Pred(clb.Count) do
Result[Succ(i)] := Chr(Ord('0') + Ord(clb.Checked[i]));
end;
procedure SetCheckedStr(clb: TCheckListBox; s: String);
var
i: Integer;
begin
for i := 0 to Pred(clb.Count) do
// clb.Checked[i] := (i < Length(s)) and (s[i] = '1'); // s[i] fails
clb.Checked[i] := (i < Length(s)) and (s[Succ(i)] = '1');
end;
function GetCheckedCard(clb: TCheckListBox): Cardinal;
var
i: Integer;
begin
Result := 0;
for i := Pred(clb.Count) downto 0 do
Result := Result shl 1 + Ord(clb.Checked[i]);
end;
procedure SetCheckedCard(clb: TCheckListBox; n: Cardinal);
var
i: Integer;
begin
for i := 0 to Pred(clb.Count) do
begin
clb.Checked[i] := Odd(n);
n := n shr 1;
end;
end;
Getippt und nicht getestet.
EDIT: Habe den von pszopp gefundenen Fehler korrigiert, damit garantiert niemand drüber stolpert.
Grüße vom marabu