Einzelnen Beitrag anzeigen

Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 17:09
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!
  Mit Zitat antworten Zitat