不需要。只要自己调用自己就可以了。记得要有递归出口。
Sample:
procedure EnableControls(AParent: TWinControl; const AEnabled: Boolean);
var
  i: Integer;
  AWinControl: TWinControl;
begin
  with AParent do
    for i := 0 to ControlCount - 1 do begin
     // Set enabled property
      Controls[i].Enabled := AEnabled;
      // Set all his children's property of enable
      if Controls[i] is TWinControl then begin
        AWinControl := TWinControl(Controls[i]);
        if AWinControl.ControlCount > 0 then
          EnableControls(AWinControl, AEnabled);
      end
    end
end;