только не забывать, что при удалении в таком цикле
Код:
for i:=0 to Panel1.ComponentCount-1 do
Panel1.Components[i].Free;
количество компонент будет убывать на каждой итерации, а условие окончания цикла вычисляется один раз, и в какой-то момент получите ошибку.
Поэтому надо делать так
Код:
for i:=Panel1.ComponentCount-1 downto 0 do
Panel1.Components[i].Free;