AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [Zeiger & Objekte] - Klasse kennt Treenode aber umgekehrt?
Thema durchsuchen
Ansicht
Themen-Optionen

[Zeiger & Objekte] - Klasse kennt Treenode aber umgekehrt?

Ein Thema von xZise · begonnen am 9. Mär 2008 · letzter Beitrag vom 9. Mär 2008
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[Zeiger & Objekte] - Klasse kennt Treenode aber umgekehr

  Alt 9. Mär 2008, 00:37
Hallo DP,
ich programmiere gerade ein kleines Programm, und habe da folgendes Problem:
Ich benutzte eine TreeView um mir einen kleinen Baum von Ordnern und Dateien anzuzeigen.
Das alleine ist nicht das Problem, aber nun will ich Informationen zu den Ordnern/Dateien abspeichern.
Also habe ich mir schnell die Klassen "TDelphiFile" und "TDelphiDirectory" erstellt (zweiteres hat vom ersteren geerbt).
Ich speichere dann in der Eigenschaft "Data" des Nodes den Zeiger auf das jeweilige Objekt.
Außerdem speichere ich in meinen Objekt, zu welchen Node es gehört.
Nun kennt der TreeNode also das jeweilige Objekt, und das Objekt wiederrum den TreeNode.
Theoretisch jedenfalls.

In der Praxis bekomme ich nur schöne AVs.

Wie mache ich das nun:
Man gibt einen Pfad an, und dann kann man die Suche starten.
Ich erstelle darauf ein Node und speichere den Node in eine Variable.
Dann nimmt er sich das Rootobjekt (TDelphiDirectory), und setzt alles neu (Der Node wird gesetzt).
Und dann geht er alle Dateien/Ordner des Rootordners durch und erstellt, wenn er eine Datei/einen Ordner findet, ein neuen Node (und speichert es in der glechen Variable zwischen).
Und damit füge ich dem jeweiligen Root ein TDelphiFile/TDelphiDirectory hinzu, und setzte bei denen die Eigenschaften (unteranderem den Node).

Wenn ich nun damit fertig bin, müsste alles gehen, aber denkste:
Ich bekomme eine schicke AV!
Außer bei dem Objekt was ich Zuletzt erstellt habe.

Ich habe mal den Code angehangen.
Er ist noch nicht fertig, und es wird auch nicht weiterkommen, solange ich dieses Problem nicht hinkriege.

MfG
xZise
Angehängte Dateien
Dateityp: 7z delphidelete_509.7z (2,2 KB, 16x aufgerufen)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 01:18
Also, das ist wirklich merkwürdig. Den Fehler kann ich auch nicht finden, aber ich hab heraus gefunden, dass alle TDelphiFile-Instanzen mit dem selben Node verknüpft sind, und alle TDelphiDirectory-Instanzen ebenfalls. (Die beiden Klassen sind aber mit unterschiedlichen Nodes verknüpft). Vielleicht bringt dich das ja weiter
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 09:12
Du verwendest @ObjectInstanz und das klappt nicht.

Weise der Eigenschaft 'TTreeNode.Data im Konstrutor der TDelphiFile / TDelphiDirectory-Klassen den Wert 'Self' (und nicht '@Self') zu. Beim Zugriff verwendest du dann 'TDelphiFile(Node.Data)'.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 11:03
Okay... Danke

Mich verwirrt nur etwas was eine Instanz ist Aber ohne dem @ geht das Wunderbar

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#5

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 11:36
Zum Thema Pointer kann ich dir mein Tutorial auf www.manuel-poeter.de empfehlen. Wenn ich mich recht erinnere steht da auch drinnen, dass Objekte nur Zeiger sind die implizit dereferenziert werden, weshalb es auch nicht nötig ist @ zu verwenden.

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 11:52
Zitat von xZise:
Mich verwirrt nur etwas was eine Instanz ist
Eine Instanz ist ein Objekt einer Klasse. Du bist eine Instanz von TMensch (ich gehe mal davon aus, das du keine Instanz von TAlien bist ).

Eine Objektvariable ist eben schon ein Zeiger auf diese Instanz. Das siehst Du am Besten, wenn Du dir die Größe der Variablen (SizeOf) ausgeben lässt.

Und nun zu deinem Fehler: Die Adresse von 'Self' ist irgen ein Speicherbereich, der beim Aufruf vom Konstruktor verwendet wird, vermutlich liegt der auf dem Stack und ist nach dem Aufruf des Konstruktors eben wieder ungültig.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 15:51
Also es funktioniert jetzt ohne @

Aber irgendwie ist es so, dass wenn man ein Objekt übergibt, dass man nicht mit dem Original arbeitet sondern einer Kopie ...
Ich les mir mal das Tut durch!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 16:08
Komisch, das mit dem @ hatte ich auch vermutet, weshalb ich es auch testweise in Pointer() umgeändert hatte. Hat aber trotzdem nicht funktioniert. Kann mir einer sagen warum? Behandelt Delphi den Typecast auf Pointer bei Objekten vielleicht anders?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 16:31
'SELF' liegt auf dem Stack (lokale Variable). Ein @Self liefert dann eben die Adresse vom Stack. Nur ist das später eben irgend etwas anderes. Wenn man kein @ verwendet, dann darf man auch kein '^' verwenden.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

Re: [Zeiger & Objekte] - Klasse kennt Treenode aber umge

  Alt 9. Mär 2008, 17:55
Ah, du meinst hier?
bDeleteEntry.Caption := TDelphiFile(Node.Data^).Name; Das hatte ich wohl nicht beachtet...
Zitat:
'SELF' liegt auf dem Stack (lokale Variable). Ein @Self liefert dann eben die Adresse vom Stack. Nur ist das später eben irgend etwas anderes.
Das ist mir schon klar
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:07 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