La condición de terminación claro que se evalúa en cada ciclo, pero delphi.com.ar se refiere a la cantidad de items.
Si ponemos:
Código Delphi
[-]
for I := ScrollBox.ControlCount -1 downto 0 do
ScrollBox.Controls[i].Free;
se toma el valor de ScrollBox.ControlCount al comienzo del ciclo y nada más. De la forma que propone seoane:
Código Delphi
[-]
while ScrollBox.ControlCount > 0 do
ScrollBox.Components[0].free ;
el valor de ControlCount debe tomarse cada vez.
// Saludos