Hi
Like Jamie said, your images must be owned by the form to be seen on your form, so form will auto free them anyway when it closes.
also using a for loop is destined to failure
imagine 8 panels, with 10 images on each (88 components).
your for loop is going 0 to 88 ( this is fixed, it does not re-evaluate the component.count value again on each iteration)
when you free a panelit autofrees the images on the panel.
when you get to the index where the images are say 9 in thissimple scenario
there is nothing to free, as they have already been freed by their parent panel being freed.
if you must iterate use a while or repeat loop as the check is doneon each iteration
ie not tested might need >=0 or -1 just showing te principle.
i:=Component.Count;
while i>0 do
begin
component[i].free;
i:=component.count;
end;
or
while component.count > 0 do component[0].Free;
or if you want a for loop go backwards through the count ie
for i := component.count - 1 downto 0 do component[i].Free;