Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Komponente aus Array löschen

  Alt 11. Jun 2010, 13:36
Viele Programmierer versuchen Objekte, Komponenten und Controls in Arrays zu speichern,
obwohl es viel geeignetere Datenstrukturen gibt.

Zitat:
Die Lösung über eine List ist aufgrund des restlichen Programmes leider nicht möglich
Dann solltest du das ändern!
Arrays sind low-Level Datenstrukturen.
Je anspruchsvoller die gewünschte Funktionalität eines Programms wird umso höherwertiger müssen auch die Datenstrukturen werden.

Z.B. bringt die Klasse TComponent schon alles mit was du brauchst.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    ShapeList : TComponent; // Liste von Shapes
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   ShapeList := TComponent.Create(Self);
end;
Wichtig zu wissen: ShapeList wird automatisch freigegeben, wenn das Formular freigegeben wird.
Und ausserdem werden alle Shapes in der Liste ebenfalls automatisch freigegeben.

So kann man z.B. ein neues Shape hinzufügen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   newshape : TShape;
begin
   newshape := TShape.Create(ShapeList);
   newshape.Left := random(300);
   newshape.Top := random(300);
   newshape.Parent := Self;
end;
Um ein bestimmes Shape anhand des Tag zu finden und zu löschen:
Delphi-Quellcode:
procedure TForm1.DeleteShapeByTag(ATag:integer);
var
   c : TControl;
   i : integer;
begin
   for i := ShapeList.ComponentCount-1 downto 0 do
   begin
     c := ShapeList.Components[i];
     if c.Tag=ATag then
     begin
       // Shape löschen
       c.Free;
       // die ShapeList wird im Hintergrund automatisch korrigiert
       // d.h. ComponentCount verringert sich um eins
     end;
   end;
Anstatt in dem Tag des PopupMenue die Position in der Liste zu speichern, kann man auch gleich das Shape selbst speichern.
Andreas
  Mit Zitat antworten Zitat