Wirklich zufrieden bin ich mit der Lösung allerdings nicht.
Wäre ich auch nicht.
Mir ging es eher um eine einfache Lösung für dein Problem.
In einem anderen Thread wurde ich darauf hingewiesen, dass so ein Ausdruck, den KodeZwerg verwendet, "dirty" sei und ich sowas lieber nicht verwenden sollte. Da ging es auch um einen Ausdruck mit einem Boolean vor der Klammer...
Nein, das würde ich so auch nicht machen. Aber mir ging es nicht um diese einzelne Zeile, sondern eher um das Konzept. Ich arbeite auch oft mit zusätzlichen Objekten für die Listen-Elemente, um z.B. weitere Informationen zu hinterlegen.
Das Visualisierungsproblem behebst du damit nicht, aber damit kann man in deinem Fall hinterlegen, welche Items gelöscht werden dürfen oder zu welcher Form die Informationen gehören, etc.
Wenn du dich vom Konstrukt verabschieden kannst, dass an jeder erlaubten Zeile ein Lösch-Button ist, könntest du einen einzelnen Button (z.B. neben oder unter der Listbox) definieren, der nur Enabled ist, wenn das Löschen für den Eintrag zulässig ist.
Ich nutze in in solchen Fällen gerne TActionList mit TAction-Einträgen. Wenn so ein Entrag mit dem Button verbunden ist, kannst du beim OnUpdate des TAction-Eintrags definieren, wann der Button erlaubt ist und wann nicht.