Hola Gustavo.
Una opción más elaborada de manejar los componentes es utilizando
TComponenList. Tenés que incluir la unit
Contnrs.
Un ejemplo:
Código Delphi
[-]
uses ..., Contnrs.
...
TForm1 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure FormShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
FCmpList: TComponentList;
function ObtenerComponentes(const ParentName: string): TComponentList;
public
end;
....
function TForm1.ObtenerComponentes(const ParentName: string): TComponentList;
var
i: Integer;
begin
Result:= TComponentList.Create;
for i:= ComponentCount - 1 downto 0 do
if Components[i].GetParentComponent.Name = ParentName then
Result.Add(Components[i])
end;
procedure TForm1.FormShow(Sender: TObject);
begin
FCmpList:= TComponentList.Create(True);
FCmpList:= ObtenerComponentes('Panel1');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to FCmpList.Count -1 do
(FCmpList.Items[i] as TControl).Enabled:= False;
(FCmpList.Items[FCmpList.IndexOf(Label1)] as TControl).Enabled:= True;
FCmpList.Items[FCmpList.IndexOf(Memo1)].Free;
end;
...
procedure TForm1.FormDestroy(Sender: TObject);
begin
FCmpList.Free;
end;
Saludos.