使用msxml组件,xml文档已经是设计好的tree模型,
只要对应节点添加进Treeview就可以了。
另外如果把Treeview做成一个activex可行吗?看了一本书,说有的vcl不可以做成activex。
还有一个问题:如果把这个treeview做成一个activex,我想把tree中节点的变化情况,写成一个xml文档,通过xmlhttp发送给服务器端(以上工作均在这个activex)中完成,可行吗?
欢迎大家讨论,希望可以附带例子,分数不限。

解决方案 »

  1.   

    查找DELPHI中的帮助文件及示例源码看看吧!相信会有答案在等你!
      

  2.   

    HTTP:IXMLHTTPRequest;
      XMLDoc:IXMLDomDocument;procedure TFrmMain.Button4Click(Sender: TObject);
    var
            i,j:Integer;
            Root:IXMLDOMElement;
            Attribs:IXMLDOMNamedNodeMap;
            CI:TListColumn;
            LI:TListItem;
    begin
            label1.Caption:=TimeToStr(Time());
            XMLDoc.async:=False;
            XMLDoc.load(SetXMLMethod(' for XML RAW '));
            //XMLDoc.documentElement;
            Root:=XMLDoc.DocumentElement;
            Attribs:=Root.FirstChild.Attributes;
            label2.Caption:=TimeToStr(Time());
            if Attribs<>NIL then
            begin                for i:=0 to Attribs.Length-1 do
                    begin
                            CI:=ListView1.Columns.Add;
                            CI.Width:=-1;
                            CI.Caption:=Attribs.Item[I].NodeName;
                            CI.AutoSize:=True;
                    end;                for I:=0 to Root.childNodes.length-1 Do
                    begin
                            Attribs:=Root.childNodes[I].attributes;
                            li:=ListView1.Items.Add;
                            Li.Caption :=attribs[0].text;
                            for J:=0 to attribs.length-1 do
                                    with LI do
                                            subitems.add(attribs[j].text);
                                    end;
                    end;
    end;function TFrmMain.SetXMLMethod(XMLMethod: String): String;
    var
            URL:String;
            SQL:String;
    begin
            URL:='http://127.0.0.1/...'//你的查询代码
            SQL:=SQL+' '+XMLMethod;
            URL:=URL+StringReplace(SQL,' ','%20',[rfReplaceAll]);
            URL:=URL+'&root=GPS_NewCase';
            Edit1.Text:=URL;
            SetXMLMethod:=URL;
    end;以上代码是如何XML Document将写入TreeView.
    对于第二个和第三个问题是可以实现的。具体如何我没有研究过,但是可以实现。
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc,QComCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        XMLDoc: TXMLDocument;
        xmltree: TTreeView;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
      procedure ReadXMLTree(RootTreeNode:TTreeNode; XMLTreeNode:IXMLNode);
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    xn:IXMLNode;
    f:TFileStream;
    begin
            //加载XML文档
            XMLDoc.LoadFromFile('D:\xml\1.xml');
            //使XML文档变为活动
            XMLDoc.Active:=true;
            //定位Xn在XML文档中的位置(假设是的第二层的第四个节点)
            xn:=xmldoc.Node;
            ReadXMLTree(NIL,XN);end;//递归方法显示
    procedure TForm1.ReadXMLTree(RootTreeNode:TTreeNode; XMLTreeNode:IXMLNode);
    var
            i:integer;
            c:TTreeNode;
    begin
            for i:=0 to XMLTreeNode.ChildNodes.Count-1 do
              begin
                   c:=xmltree.Items.AddChild(RootTreeNode,XMLTreeNode.ChildNodes.Nodes[i].NodeName);
                   ReadXMLTree(c,XMLTreeNode.ChildNodes.Nodes[i]);
              end;
    end;end;
      

  4.   

    眼镜兄写的,可以参考。
    稍加了点补充procedure TDockableForm.XMLToTree(XMLDocValue: TXMLDocument;FileName : String;IntValue : Integer);
    begin
      TreeView1.Items.Clear;
      if IntValue = 0 then
      begin
        XMLDocument1.Active := False;
        XMLDocument1.LoadFromFile(FileName);
        XMLDocument1.Active := True;
      end else
      begin
        XMLDocument1.Active := False;
        XMLDocument1.XML := SCPXML;
        XMLDocument1.Active := True;
      end;
      DOMNode:=(XMLDocument1.DocumentElement.DOMNode as IXMLDOMNodeRef).GetXMLDOMNode;
      TreeView1.Items.Clear;
      GenerateTree(TreeView1.Items.AddFirst(nil,'untitiled.scp'),DOMNode.selectSingleNode('/Scientist_Project'));
    end;
    procedure TDockableForm.GenerateTree(ParentNode: TTreeNode;
      Node: IXMLDOMNode);
    var
        curNode:IXMLDOMNode;
        TNode : TTreeNode;
        i,j:integer;
        pData:PXMLNodeInfo;
        Nodes:IXMLDOMNodeList;
        vStr : String;
    begin
        Nodes:=Node.selectNodes('./*');
        for I := 0 to Nodes.length  - 1 do    // Iterate
        begin
            curNode:=nodes.item[i];
            for j := 0 to curNode.attributes.length -1 do
              if CompareText(curNode.attributes.item[j].nodeName,'Active') = 0 then
                vStr := curNode.attributes.item[j].nodeValue else
                vStr := '';        if curNode.hasChildNodes =false then continue;
            if Not Assigned(curNode.selectSingleNode('Name')) then
            begin
                Try
                  GenerateTree(
                      TreeView1.Items.AddChild(ParentNode,curNode.nodeName),
                      curNode);
                  continue;
                Except
                  Exit;
                end;
            end;
            Try
              GetMem(pData,Sizeof(TXMLNodeInfo));
              pData.Name :=curNode.selectSingleNode('Name').text ;
              pData.Path :=curNode.selectSingleNode('Path').text ;
              pData.Active := vStr;
              TreeView1.Items.AddChild(ParentNode,pData.Name).Data :=pData;
            Except
              Exit;
            end;
        end;    // for
        TreeView1.FullExpand;
    end;----------------------------------------------------------
    等待,如沙漠行舟,痛苦万分