Das ist dann halt eine andere Anforderung, für die man ja immer noch den Standard-Enumerator verwenden kann:
Delphi-Quellcode:
for var cmp in Self do begin
if cmp is TButton then
TButton(cmp).Caption := 'Hello World'
else if cmp is TPageControl then
TPageControl(cmp).ActivePageIndex := 0
else if cmp is TEdit then
TEdit(cmp).Font.Style := [fsBold];
end;
Eigentlich ist das aber ein Anwendungsfall für das
Visitor Pattern:
Delphi-Quellcode:
type
TMyVisitor = class(TVisitor) { Source für TVisitor siehe Link }
public
procedure VisitButton(Instance: TButton);
procedure VisitPageControl(Instance: TPageControl);
procedure VisitEdit(Instance: TEdit);
end;
procedure TMyVisitor.VisitButton(Instance: TButton);
begin
Instance.Caption := 'Hello World';
end;
procedure TMyVisitor.VisitEdit(Instance: TEdit);
begin
Instance.Font.Style := [fsBold];
end;
procedure TMyVisitor.VisitPageControl(Instance: TPageControl);
begin
Instance.ActivePageIndex := 0;
end;
procedure TForm40.Button1Click(Sender: TObject);
var
visitor: TMyVisitor;
begin
visitor := TMyVisitor.Create;
try
for var cmp in Self do
visitor.Visit(cmp);
finally
visitor.Free;
end;
end;