Hola de nuevo sancarlos, para almacenar los nombres de tus componentes sería mejor que utilizaras un StrinList, así contarias con muchas funciones. Te doy un ejemplo de mas o menos como lo haría yo, despues tu ves como adaptarlo a tu codigo.
Sobre tu StringList lo puedes crear si quieres en el onCreate de tu forma y cada vez que entres a tu función tendrías que limpiarlo o sino en tu función directamente verificas si esta creado, si es así lo liberas primero y luego lo vuelves a crear.
Código Delphi
[-]
slNombres : TStringList;
........
.......
slNombres := TStringList.Create; slNombres.Clear;
if Assigned(slNombres) then
FreeAndNil(slNombres);
slNombres := TStringList.Create;
Cuando crees un componente, tu añades el nombre que le estas dando a un arreglo, ahora lo añadirias a tu StringList.
Código Delphi
[-]
tmyboton.Name:='s'+adoportsportnumber.AsString+'s'; tMyBoton.Parent := MyPanel;
if firstrow <= 600 then begin
firstrow := firstrow + 30;
tMyBoton.left := firstrow;
tMyBoton.Top := 2;
......
slNombres.Add(tmyboton.Name);
Para eliminar los componentes que ya no esten en nuestra lista, podemos hacerlo así, como tenemos una lista con los nombres de los componentes de nuestro ScrollBox que deberían estar, podemos recorrer por los componentes que estan en nuestro ScrollBox pero solo lo que esta dentro del ScrollBox para que no nos elimine lo que esta fuera de el, e ir preguntando uno a uno si esta en nuestra lista, si no esta lo eliminamos.
Código Delphi
[-]
for i:=ScrollBox1.ControlCount-1 downto 0 do
begin
if slCampos.IndexOf(ScrollBox1.Controls[i].Name)=-1 then
begin
showmessage('no esta en el scrollbox');
ScrollBox1.Controls[i].Destroy; end
else
showmessage('esta en el scrollbox');
end;
Ahora también deberías controlar que si ya hay un componente creado, no lo vuelvas a crear, eso puedes preguntar antes de crear el componente.
Código Delphi
[-]
if ScrollBox1.ContainsControl(TControl(FindComponent(adoportsportnumber.AsString))) then
showmessage('el componente esta en el ScrollBox, ya no debemos crearlo')
else
showmessage('el componente no esta en el ScrollBox');
donde con FindComponent buscamos el componenete que tenga el nombre que le queremos dar "adoportsportnumber.AsString" , y con ContainsControl nos aseguramos que ese componente este dentro de nuestro ScrollBox.
Saluditos