Re: TXMLDocument and TTreeView



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'


.



Relevant Pages

  • Re: TXMLDocument and TTreeView
    ... contents of an XML file. ... the Data property so that I can access it immediately. ... interface and I don't really understand how it works. ... I've found an alternative XMLDocument component on ...
    (alt.comp.lang.borland-delphi)
  • Re: TXMLDocument and TTreeView
    ... contents of an XML file. ... I can parse the TXMLDocument and add nodes to the tree with no ... I guess this is something to do with the fact that IXMLNode is an ... interface and I don't really understand how it works. ...
    (alt.comp.lang.borland-delphi)
  • Re: TXMLDocument and TTreeView
    ... when traversing the XML Document is a IXMLNode, ... interface and I don't really understand how it works. ... which was added in Delphi 6) with an explicit IXMLNode property. ... I should have checked that the Data property of a TTreeNode was ...
    (alt.comp.lang.borland-delphi)
  • Re: TXMLDocument and TTreeView
    ... when traversing the XML Document is a IXMLNode, ... interface and I don't really understand how it works. ... which was added in Delphi 6) with an explicit IXMLNode property. ... I should have checked that the Data property of a TTreeNode was ...
    (alt.comp.lang.borland-delphi)
  • Re: variable length fields for flexibility in subroutines
    ... What you might look into is creating a description of your "interface ... block" in XML, then parsing that document and spinning through the nodes ... existing system (no recompilation of any Assemblies), is efficient, and ... Interface blocks for inter-program communication...Create an Interface ...
    (comp.lang.cobol)