使用msxml组件,xml文档已经是设计好的tree模型,
只要对应节点添加进Treeview就可以了。
另外如果把Treeview做成一个activex可行吗?看了一本书,说有的vcl不可以做成activex。
还有一个问题:如果把这个treeview做成一个activex,我想把tree中节点的变化情况,写成一个xml文档,通过xmlhttp发送给服务器端(以上工作均在这个activex)中完成,可行吗?
欢迎大家讨论,希望可以附带例子,分数不限。
只要对应节点添加进Treeview就可以了。
另外如果把Treeview做成一个activex可行吗?看了一本书,说有的vcl不可以做成activex。
还有一个问题:如果把这个treeview做成一个activex,我想把tree中节点的变化情况,写成一个xml文档,通过xmlhttp发送给服务器端(以上工作均在这个activex)中完成,可行吗?
欢迎大家讨论,希望可以附带例子,分数不限。
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.
对于第二个和第三个问题是可以实现的。具体如何我没有研究过,但是可以实现。
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;
稍加了点补充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;----------------------------------------------------------
等待,如沙漠行舟,痛苦万分