Re: TXMLDocument and TTreeView
- From: Cafetorium <phil@xxxxxxxxxxxxxxxx>
- Date: Thu, 26 Jul 2007 08:29:30 -0700
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'
.
- Follow-Ups:
- Re: TXMLDocument and TTreeView
- From: Chris.Cheney
- Re: TXMLDocument and TTreeView
- References:
- TXMLDocument and TTreeView
- From: Cafetorium
- Re: TXMLDocument and TTreeView
- From: Chris.Cheney
- Re: TXMLDocument and TTreeView
- From: Cafetorium
- TXMLDocument and TTreeView
- Prev by Date: Re: TXMLDocument and TTreeView
- Next by Date: network paradox table
- Previous by thread: Re: TXMLDocument and TTreeView
- Next by thread: Re: TXMLDocument and TTreeView
- Index(es):
Relevant Pages
|