![]() |
Pointer auf IXMLDOMElement
Hallo DPler!
Ich habe jetzt schon überall im Internet und hier gesucht, doch nirgends etwas gefunden (ausgenommen EINEN Treffer in einem kostenpflichtigen Forum :( ) Ich bin auch fast überzeugt, dass ich etwas übersehen haben muss. Denn es kommt mir komisch vor, dass ich der erste sein soll, der danach fragt... Ich liste alle Knoten aus einer XML-Datei in einem TTreeView auf. Jedoch hat jeder XML-Knoten noch mehrere Properties, die ich gern anzeigen lassen möchte, wenn man auf der/das? entsprechende Node im TreeView klickt. Damit ich einen Bezug zwischen den zweien herstellen kann, habe ich nun versucht einen Pointer auf den XML-Knoten im TreeNode.Data zu speichern. Aber das funzt nicht richtig (hatte auch schon Probleme zu dem Pointer zu kommen, da es mit dem @-Operator ja nicht funktioniert)
Delphi-Quellcode:
var
TreeNode: TTreeNode; xmlNode: IXMLDOMElement; { Einlesen in TreeView } for I := 0 to xmlNode.childNodes.length-1 do begin TreeNode := Tree.Items.AddChild(NIL, (xmlNode.childNodes[I] as IXMLDOMElement).getAttribute(AttrName)); TreeNode.Data := Pointer(xmlNode.childNodes[I]); { Auslesen aus TreeView } xmlNode := IXMLDOMElement(Node.Data); |
Re: Pointer auf IXMLDOMElement
Geht auch nicht direkt. Aber nutze einen Wrapper, das ist relativ einfach.
Delphi-Quellcode:
Aber nicht vergessen die Klasse später wieder freizugeben ;)
type
TNodeData = class private FXMLNode: IXMLDOMNode; public constructor Create(aXMLNode:IXMLDOMNode); property XMLNode: IXMLDOMNode read FXMLNode; end; .... var TreeNode: TTreeNode; xmlNode: IXMLDOMElement; { Einlesen in TreeView } for I := 0 to xmlNode.childNodes.length-1 do begin TreeNode := Tree.Items.AddChild(NIL, (xmlNode.childNodes[I] as IXMLDOMElement).getAttribute(AttrName)); TreeNode.Data := TNodeData.Create(xmlNode.childNodes[I]); { Auslesen aus TreeView } xmlNode := TNodeData(Node.Data).XMLNode; ...:cat:... |
Re: Pointer auf IXMLDOMElement
Danke sakura!! :-) Es funktioniert endlich :party:
Noch eine Frage zum Wiederfreigeben: Wie gestalte ich das bei einem TreeView am elegantesten wenn ich den ganzen bzw. Teile davon löschen möchte? Muss ich mir da extra was Rekursives basteln oder gibts da schon vorgefertigte Sachen von der VCL? |
Re: Pointer auf IXMLDOMElement
Zitat:
Für das Löschen von TreeNodes gibt es imo auch ein Event im Objektinspektor, so dass Du dann die entsprechenden Objekte aus dem Data-Pointer jeweils freigeben kannst ;) ...:cat:... |
Re: Pointer auf IXMLDOMElement
Zitat:
Nochmal danke, jetzt kann ich endlich weitercoden :) :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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