Für sowas habe ich mir mal folgende Routine geschrieben:
Delphi-Quellcode:
class procedure TUtilities.ForAllComponentsOf<T>(Container: TComponent; DoProc: TProc<T>);
var
cmp: TComponent;
begin
for cmp in Container do
if cmp is T then
DoProc(T(cmp));
end;
Das würde man in deinem Fall (angenommen, es gibt keine anderen Shapes) innerhalb des Forms dann in etwa so benutzen:
Delphi-Quellcode:
TUtilities.ForAllComponentsOf<TShape>(Self,
procedure(Arg: TShape)
begin
Arg.Visible := False;
end);
Welche Units müssen denn in die uses-Klausel? Wäre für den Themenersteller (und andere) vielleicht hilfreich.