Du hast die Lösung doch schon geschrieben und genutzt.
Du fragst ab, ob irgendwas is tIrgendwas, wenn ja mach was.
Du übergibst halt als Parameter einen Vorfahrentyp, der bei allen gleich ist.
Da Du in der Schleife Components abfragst und damit nach allen Komponenten suchst, übergibst Du der Prozedure halt die Komponente, bei der Du alle Komponenten abfragst, die sie in Components enthält.
Delphi-Quellcode:
procedure WieSuchenNachKomponenten(a : TComponent);
var
i : Integer;
begin
if a is TForm then begin
for i := 0 to a.Componentcount - 1 do begin
if a.Components[i] is TWasweissIch then begin
// TustduwasweissIch
end else
if a.Components[i] is TKannwasAnderesSein then begin
// TustduKannwasAnderesSein
end;
end;
end else
if a is TFrame then begin
// Wenn es was ganz anderes sein soll
end else
...
end;
Ist es egal, ob nun ein TForm oder ein TFrame reinkommt, dann geht's auch ohne die Abfrage nach TForm bzw. TFrame.
Du willst ja schließlich was mit den Komponenten machen, die in Components enthalten sind. Dabei dürfte es (fast) egal sein, ob das Teil, dass Du in die Prozedur reingibst nun ein TFrom oder ein TFrame oder ein TPanel oder TEinWasWeissIch ist, dessen Komponenten aus Components "verarbeitet" werden sollen.