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