Die Eigenschaft
Components ist eine "Liste" (genauer: Array-Eigenschaft) von Komponenten und sie enthält genau
ComponentCount viele Einträge. Wenn Du einen Eintrag entfernst, besitzt sie folglich weniger Einträge, so dass ein Löschen des dritten Eintrags einer Liste mit drei Einträgen zur Folge hat, dass ein Zugriff auf den dritten Eintrag zum Fehler führt: Er existiert nicht länger.
Darüber hinaus ist der Destruktor von
TComponent so implementiert, dass sich die Exemplar selbstständig aus der "Liste"
Components des durch
Owner referenzierten Objekts austragen, so dass Du einfach
Delphi-Quellcode:
with AnObject do
while ComponentCount>0 do
Components[0].Free;
schreiben kannst.