Hallo, ich habe einen Mapeditor erstellt, der aus Shapes, die man auf die Form zieht, eine Karte erstellt.
Dazu werden die Objekte mit Namen, Left, Top, Width und Heigth in einer Liste (SL) gespeichert, um die Karte hinterher wieder laden zu können:
Inhalt SL:
Delphi-Quellcode:
Name //Zufällig erstellt
Left
Top
Width
Height
Dies geschieht beim MouseUp-Ereignis der Form.
Außerdem wird den erstellten Objekten ein OnMouseDown-Ereignis zugewiesen, die Prozedur Destroyer.
Diese sieht wie folgt aus:
(Bei "Objekt" handelt es sich um eine Variable des Typs TShape)
Delphi-Quellcode:
procedure TMap.Destroyer(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var name:string;
i:integer;
begin
//Abfrage
if MessageDLG('Objekt wirklich löschen?',mtcustom,[mbyes,mbno],0)=mrno then exit;
Name:=(Sender as TShape).name;
Objekt:=Findcomponent(name) as TShape;
i:=0;
//Aus Liste löschen
while LowerCase(SL[i])<>LowerCase(name) do
begin
//Objektnamen suchen
i:=i+1;
end;
//Alle 5 Eigenschaften aus der Liste löschen
SL.Delete(i);
SL.Delete(i);
SL.Delete(i);
SL.Delete(i);
SL.Delete(i);
//Objekt selber löschen
Sender.Destroy;
end;
Bei Sender.destroy passiert jedoch folgendes: Es werden zusätzlich alle Shapes gelöscht, die nach diesem Shape erstellt wurden. Wo ist da der Fehler???
Liebe Grüße!