Delphi 中用 Xml 配置文档生成 Treeview

2016-08-22 10:19:25来源:http://itwatch.blog.51cto.com/1338142/286535作者:网眼人点击


用递归方法,使用 xml 文档生成 Treeview 树形视图。由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,
从而实现了 xml 对 Treeview 的动态配置,而不用修改代码。


xml 文件如下:


<?xmlversion=”1.0″encoding=”gb2312″?><roottopic=”频道列表”catalog=”none”><channeltopic=”操作系统”catalog=”none”><channeltopic=”Windows频道”catalog=”windows”/><channeltopic=”DOS频道”catalog=”dos”/><channeltopic=”Linux”catalog=”linux”/></channel><channeltopic=”菜鸟专区”catalog=”cainiaozhuanqu”/><channeltopic=”应用软件”catalog=”app”/><channeltopic=”安全专区”catalog=”safe”/><channeltopic=”代码实验室”catalog=”lab”/><BBStopic=”电脑学习社区”catalog=”none”><subBBStopic=”子社区-1″catalog=”sub1″/><subBBStopic=”子社区-2″catalog=”sub2″/></BBS></root>程序代码如下: unittree_xml; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls, Forms,Dialogs,ComCtrls,StdCtrls,XMLDoc,XMLIntf; type TForm1=class(TForm) TreeView1:TTreeView; Memo1:TMemo; Button1:TButton; procedureTreeView1MouseDown(Sender:TObject;Button:TMouseButton; Shift:TShiftState;X,Y:Integer); procedureButton1Click(Sender:TObject); private procedureCreateTreeview(XmlNode:IXMLNode;TreeNode:TTreeNode); {Privatedeclarations} public {Publicdeclarations} end; type pRec=^TData; TData=recordsCatalog:string; sReserved:String end; var Form1:TForm1; implementation {$R*.dfm} procedureTForm1.CreateTreeview(XmlNode:IXMLNode;TreeNode:TTreeNode); var i:integer; ParentTreeNode,CurrentTreeNode:TTreeNode; pData:pRec; begin New(pData); pData^.sCatalog:=XmlNode.AttributeNodes[’catalog’].NodeValue; CurrentTreeNode:=TreeView1.Items.AddChildObject(TreeNode, XmlNode.AttributeNodes[’topic’].NodeValue,pData);//pointer(…) ifXmlNode.HasChildNodesthen begin ParentTreeNode:=CurrentTreeNode; fori:=0toXmlNode.ChildNodes.Count-1do begin CreateTreeview(XmlNode.ChildNodes[i],ParentTreeNode); end; end; end; {——————————————————————} procedureTForm1.TreeView1MouseDown(Sender:TObject;Button:TMouseButton; Shift:TShiftState;X,Y:Integer); varpData:pRec; begin pData:=Treeview1.Selected.Data; Memo1.Lines.Add(pData^.sCatalog); end; procedureTForm1.Button1Click(Sender:TObject); var oXml:TXMLDocument; begin oXml:=TXMLDocument.Create(self); oXml.FileName:=‘_Treeview.xml’; oXml.Active:=true; CreateTreeview(oXml.ChildNodes.FindNode(’root’),Treeview1.Items.GetFirstNode); Treeview1.FullExpand;//节点全部展开 oXml.Free; end; end.

注意程序中 Treeview 的 TreeView1.Items.AddChildObject 方法,其最后一个参数用来保存该节点的相关数据,是一个指针类型的数据,使用时要格外小心。本例中,先定义一个记录类型,再定义一个指针指向它,然后作为 AddChildObject 的最后一个参数。记录类型可以保存节点的很多相关参数,本例中只用到了一个,实际使用时可以任意扩充。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台