Nim eine TObjectList, damit lassen sich die Shapes besser verwalten (da du bspw. per Delete, Insert auf bestimmte Positionen zugreifen kannst und dich nicht um eine Verschiebung der anderen kümmern musst) und bei der Freigabe werden auch alle Objekte gleich mit freigegeben. Hier mal ein Beispiel:
Pack die Units "Contnrs" (TObjectList) und "ExtCtrls" (TShape) in die Uses-Klauses am Anfang deines Codes. Dann definierst du eine Variable der ObjectList:
Delphi-Quellcode:
...
private
{ Private-Deklarationen }
ShapeList: TObjectList;
...
Im OnCreate der Form erzeugst du die Liste und im Destroy gibst du sie wieder frei:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
//Objectlist erzeugen
ShapeList := TObjectList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Instanz freigeben (alle Objekte in der Liste werden mit freigegeben)
ShapeList.Free;
end;
Nun hast du einen Button (als Beispiel) um ein paar Shapes zu erzeugen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
Shape: TShape;
begin
//10 Shapes erzeugen
for i := 1 to 10 do
begin
Shape := TShape.Create(Self);
Shape.Parent := Self;
Shape.Name := 'Shape' + IntToStr(i);
Shape.Left := 10 * i + 10;
Shape.Top := 10;
Shape.Width := 5;
Shape.Height := 5;
ShapeList.Add(Shape);
end;
end;
Jetzt kannst du ganz leicht auf die Shapes zugreifen, bspw. über einen zweiten Button:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
//auf die Shapes in der Liste zugreifen, bzw. durch
//die Schleife auf alle
for i := 0 to ShapeList.Count - 1 do
TShape(ShapeList[i]).Brush.Color := clLime;
end;
MfG Pr0g