AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fehler beim löschen von Objekten

Ein Thema von Delphi-Narr · begonnen am 30. Jan 2010 · letzter Beitrag vom 30. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2   
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, 18: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:11
Wie wäre es mit
(Sender as TShape).Free
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:13
Ich würde die Shapes selber in einer Objektliste verwalten und nicht ihre Eigenschaften in einer Stringliste
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:15
Jupp, Destroy sollte man möglichst nicht direkt aufrufen.

Zitat:
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???
Hast du mal gedebuggt und geschaut, was beim Aufrif dieser Methode passiert?

Zitat:
Objekt:=Findcomponent(name) as TShape;
Sender ist schon das Objekt ... wozu also nochmal suchen?

while LowerCase(SL[i])<>LowerCase(name) do Kennst du von einer StringList schon .IndexOf und seine Freunde?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

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

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:18
@ 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...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:20
Zitat:
@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...
Kannt du doch beim Speic
hern direkt aus den Objekten auslesen
Zitat:
@ 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...
Doch wenn du Sender nach TShape castest
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#7

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:32
Zitat:
Doch wenn du Sender nach TShape castest
Genau, denn was machst du, um an den Namen zu kommen
oder um ein TShape aus FindCompnent zu machen, welches ja ein TComponent liefert.

Zitat:
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???
Wie erstellst du denn die Shapes?

Hab da soeinen Verdacht, den Owner betreffend.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

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

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:41
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:46
Objekt:=TShape.Create(unit1.Objekt); Unit1.Objekt ist der Owner. Nimm besser das Formular
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

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

Re: Fehler beim löschen von Objekten

  Alt 30. Jan 2010, 18:50
Ah, jetzt klappt es. Danke!
Und warum hat es nicht mit der anderen Variante geklappt?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz