Thema: Delphi shape1+1 ?

Einzelnen Beitrag anzeigen

Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#3

Re: shape1+1 ?

  Alt 20. Mär 2005, 20:52
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
  Mit Zitat antworten Zitat