Re: TXMLDocument and TTreeView
- From: "Chris.Cheney" <Chris.CheneyXXNOSPAMXX@xxxxxxxxx>
- Date: Thu, 26 Jul 2007 16:01:12 GMT
Cafetorium <phil@xxxxxxxxxxxxxxxx> wrote in
news:1185463770.014386.97620@xxxxxxxxxxxxxxxxxxxxxxxxxxxx:
On Jul 26, 4:22 pm, Cafetorium <p...@xxxxxxxxxxxxxxxx> wrote:
On Jul 26, 3:54 pm, "Chris.Cheney" <Chris.CheneyXXNOSPA...@xxxxxxxxx>
wrote:
Cafetorium <p...@xxxxxxxxxxxxxxxx> wrote in
news:1185459002.704130.267600 @l70g2000hse.googlegroups.com:
I've been tinkering with the idea of using a TTreeView to display
the contents of an XML file.
I can parse the TXMLDocument and add nodes to the tree with no
problems, but it would be really useful if I could attach each
node to the Data property so that I can access it immediately.
The Data porperty is a (System.)Pointer, but the object I use
when traversing the XML Document is a (XMLIntf.)IXMLNode, and I
can't work out how to use these two together.
I tried
tn.Data := addr(iNode);
which worked ok.
Then in my TreeView OnClick method, I want to get the XML node
back again by accessing the Data object, but I can't work out how
to do it.
iNode := tn.Data^;
doesn't work, and neither does
iNode := tn.Data^ as IXMLNode;
I guess this is something to do with the fact that IXMLNode is an
interface and I don't really understand how it works.
Can anyone enlighten me, please?
Phil
IXMLNode(tn.Data) := iNode;
iNode := IXMLNode(tn.Data); // or
iNode := IInterface(tn.Data) as IXMLNode; // if the QI is needed
And, when the treenode is destroyed, don't forget to
IXMLNode(tn.Data) := nil;
Casting the treenode in the above cases will cause the compiler to
generate the appropriate interface reference-counting code which
will not happen if you take the other alternative of casting the
interface to a pointer.
You may be better off using a custom tree node type (provision for
which was added in Delphi 6) with an explicit IXMLNode property.
Thanks for the rapid reply.
In the meantime, I've found an alternative XMLDocument component on
Torry.
The XML nodes it creates are objects, so Data can point to them just
like any other object.
However, I'll give your suggestion a try because I want to stick with
the standard component.
Phil
Hmmm. Tried it and got:
IXMLNode(tn.Data) := iNode;
E2064 Left side cannot be assigned to
E2010 Incompatible types: 'IXMLNode' and 'Pointer'
Sorry, I should have checked that the Data property of a TTreeNode was
not a method.
Use Plan B above.
.
- Follow-Ups:
- Re: TXMLDocument and TTreeView
- From: Cafetorium
- Re: TXMLDocument and TTreeView
- References:
- TXMLDocument and TTreeView
- From: Cafetorium
- Re: TXMLDocument and TTreeView
- From: Chris.Cheney
- Re: TXMLDocument and TTreeView
- From: Cafetorium
- Re: TXMLDocument and TTreeView
- From: Cafetorium
- TXMLDocument and TTreeView
- Prev by Date: network paradox table
- Next by Date: Re: How to implement two's complement on a two's complement cpu ?
- Previous by thread: Re: TXMLDocument and TTreeView
- Next by thread: Re: TXMLDocument and TTreeView
- Index(es):
Relevant Pages
|