Ich würde wahrscheinlich eher über Controls iterieren als über Components. Controls bezieht sich auf Parent-Beziehung, während Components die Owner-Beziehung auswertet. Aber in meinen Augen ist die eigene Verwaltung über ein Array/eine Liste sowieso die beste Lösung, da man dort gezielt Panels aufnehmen bzw. ausschließen kann.
[edit] Beispiel (ich erzeuge die Panels hier dynamisch, das muss man natürlich nicht, man kann sie auch einzeln den Array-Elementen zuweisen):
Delphi-Quellcode:
const
PANELCOUNT = 42;
PANELSPERCOL = 3;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDblClick(Sender: TObject);
private
{ Private-Deklarationen }
FPanels: array [1 .. PANELCOUNT] of TPanel;
public
{ Public-Deklarationen }
end;
...
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
CntRows: integer;
begin
CntRows := PANELCOUNT div PANELSPERCOL;
for i := Low(FPanels) to High(FPanels) do
begin
FPanels[i] := TPanel.Create(self);
FPanels[i].Parent := self;
FPanels[i].ParentBackground := false;
FPanels[i].Height := ClientHeight div CntRows;
FPanels[i].Width := ClientWidth div PANELSPERCOL;
FPanels[i].Left := ClientWidth div PANELSPERCOL * (i mod PANELSPERCOL);
FPanels[i].Top := ClientHeight div CntRows * (i mod CntRows);
end;
end;
procedure TForm1.FormDblClick(Sender: TObject);
var
i: integer;
begin
for i := Low(FPanels) to High(FPanels) do
FPanels[i].Color := clRed;
end;
[/edit]