Понятное дело что "ашибка"..
Сам посуди.. Что будет Если ты вытащить 1-й элемент из 10... В данном случае все остальные сместятся..
2-й станет 1-м, 3-й 2-м и т.д.
Ну и когда ты обратишься по индексу к элементу которого уже нет на месте.. исключение..
Все просто вроде..
Либо удаляй элементы с конца..
Код:
for i:= Form.ComponentCount-1 downto 0 do
begin
Form.Components[i].Free;
end;
Тогда все будет ОК. Удалишь 10-й, 9-й, 8-й и тд.
Или просто удаляй первый..
Код:
for i:= 0 to Form.ComponentCount-1 do
begin
Form.Components[0].Free;
end;
Всегда удалиться первый..
Все дело в смещении.. и волшебных пузырьках.. :-
Через деббагер проследи как оно все работает.. помогало мне на начальном этапе, да и щас тож).
Ну а если тебе необходимо удалить только те элементы, что ты создал динамически, то канечно присваивай их тегам значение.. и тогда это так будет выглядеть
Код:
for i:= Form.ComponentCount-1 downto 0 do
begin
if Form.Components[i].Tag = 666 then
Form.Components[i].Free;
end;