![]() |
Fehler beim löschen von Objekten
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:
Dies geschieht beim MouseUp-Ereignis der Form.
Name //Zufällig erstellt
Left Top Width Height 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:
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???
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; Liebe Grüße! |
Re: Fehler beim löschen von Objekten
Wie wäre es mit
Delphi-Quellcode:
(Sender as TShape).Free
|
Re: Fehler beim löschen von Objekten
Ich würde die Shapes selber in einer Objektliste verwalten und nicht ihre Eigenschaften in einer Stringliste
|
Re: Fehler beim löschen von Objekten
Jupp, Destroy sollte man möglichst nicht direkt aufrufen.
Zitat:
Zitat:
Delphi-Quellcode:
Kennst du von einer StringList schon .IndexOf und seine Freunde?
while LowerCase(SL[i])<>LowerCase(name) do
|
Re: Fehler beim löschen von Objekten
@ luckie:Leider das gleiche Problem...
@mkinzler: Die Liste wird hinterher als Datei exportiert und so kann ich die wirklich wichtigen Eigenschaften in der Form speichern, wie ich sie hinterher brauche... @ himitsu: Habe ich bisher noch nicht verwendet... Da ich von Sender die Eigenschaften nicht einfach auslesen kann, brauche ich es als definierten Typ, ein TShape. Anders hab ich auch schon versucht, klappt jedoch nicht... |
Re: Fehler beim löschen von Objekten
Zitat:
hern direkt aus den Objekten auslesen Zitat:
|
Re: Fehler beim löschen von Objekten
Zitat:
oder um ein TShape aus FindCompnent zu machen, welches ja ein TComponent liefert. :zwinker: Zitat:
Hab da soeinen Verdacht, den Owner betreffend. :stupid: |
Re: Fehler beim löschen von Objekten
Dies ist die Art, wie ich sie erstelle (handelt sich hierbei um ein "Loch". Zufall wird beim Programmstart zufällig gesetzt, damit beim erneuten Laden keine doppelten Objekte vorhanden sind.
Delphi-Quellcode:
Objekt:=TShape.Create(unit1.Objekt); Objekt.parent:=map; Objekt.Name:='Loch'+Zufall+IntTOStr(NummerL); Objekt.Shape:=stcircle; Objekt.Top:=Y; Objekt.Left:=X; Objekt.Width:=20; Objekt.Height:=20; Objekt.Brush.Color:=clblack; Objekt.OnMouseDown:=Destroyer; NummerL:=NummerL+1; exit; |
Re: Fehler beim löschen von Objekten
Delphi-Quellcode:
Unit1.Objekt ist der Owner. Nimm besser das Formular
Objekt:=TShape.Create(unit1.Objekt);
|
Re: Fehler beim löschen von Objekten
Ah, jetzt klappt es. Danke!
Und warum hat es nicht mit der anderen Variante geklappt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz