Einzelnen Beitrag anzeigen

shmia

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

AW: Komponente aus Array löschen

  Alt 11. Jun 2010, 17:15
jedoch wollte ich wissen wie es mit array funktioniert.
Wenn im Array ein "Loch" entsteht, dann muss man halt die Elemente zusammenschieben.
Man kann das mit einer Schleife machen.
Hardcore - Programmierer setzen hier auch die Procedure Move ein.
Delphi-Quellcode:
procedure RemoveElementFromArray(a : Array of TShape; idx:integer);
var
  i : integer;
begin
  Assert(idx >= 0);
  for i := idx to High(a)-1 do
  begin
    a[idx] := a[idx+1];
  end;
  SetLength(a, Length(a)-1); // Array verkürzen
end;
Anschliesend musst du wohl auch noch noch die Tag-Werte von deinem Popupmenu korrigieren.
Delphi-Quellcode:
for i := 0 to Popupmenu2.Items.count-1 do
begin
  if Popupmenu2.Items[i].Tag >= Helper then
     Popupmenu2.Items[i].Tag := Popupmenu2.Items[i].Tag -1;
end;
Ich kann nur sagen, dass du so einen hässlichen Sourcecode bekommst.

Würdest du meinen Vorschlag annehmen, dann sähe das Löschen so aus:
Delphi-Quellcode:
procedure TForm1.Lschen2Click(Sender: TObject);
var
  mi : TMenuItem;
  c : TComponent;
begin
  mi := Sender as TMenuItem;
  // im Tag des Menuitems steckt die Verbindung zum Shape
  c := TComponent(mi.Tag);
  if not Assigned(c) then
     Exit;
  c.Free; // Shape wird gelöscht und automatisch auch aus ShapeList entfernt
Andreas
  Mit Zitat antworten Zitat