Eine Möglichkeit wäre ein Array zu verwenden (geht nur, wenn die Listbox sich
nicht sortiert, ansonsten muss das Array auch mit sortiert werden!).
Code:
var
aArray: array of bool; //Bool ist nur eine Empfehlung
Das Array müsste (idealerweise) immer die Größe haben, wieviele Items es in der Listbox gibt.
Code:
setlength(aArray, Listbox.items.count);
So das Listboxitem 0 = aArray[0] wäre.
Beim löschen/schreiben musst du dann das Array natürlich jedesmal mit anpassen.
Hinzufügen
1. Den Eintrag in die Listbox hinzufügen
2. die Länge des Array neu definieren
3. Den entsprechenden Eintrag im Array anpassen. z.B. (ungetestet):
Code:
Listbox.items.add('ITEMTEXT');
setlength(aArray, Listbox.items.count);
iItem := Listbox.IndexOf('Eintrag');
aArray[iItem] := True; //(True = darf gelöscht werden, False = darf nicht gelöscht werden)
//optional, wenn du das "X" (leider nur als Haken möglich) haben willst:
//CheckListbox.items[iItem].checked := aArray[iItem];
Löschen
Code:
iItem := ListBox.ItemIndex; //Position zwischenspeichern
if aArray[iItem] then //Prüfung
begin
//darf gelöscht werden
ListBox.Items.Delete(iItem);
//Achtung das Array muss auch angepasst werden!
for i := iItem + 1 to length(aArray) do //Array durchlaufen und aufrücken
begin
aArray[i - 1] := aArray[i];
end;
aArray := length(aArray) - 1;
end else
begin
//darf nicht gelöscht werden -> Fehlermeldung?
end;
Alles nur aus dem Gedächtnis und kann Fehler enthalten