有一树型结构我要把它节点的位置关系及其节点的属性信息存储到一个文件中,要求我要可以根据文件建树
解决方案 »
- 同样的代码,D5和D10 效果不一样?!-----------------------------------------------------没分数了;
- 请大侠帮忙!
- 急死人了,我百思不得其解!!!望大虾 进入开解。
- 请教:在Delphi6中如何调用AdoConnection的Build Connection String的数据链接属性对话框?
- DELPHI的Indv上那么多VCL如何使用啊?
- ics-ftpserver~~
- 如何看到DLL里引出的函数的结构,我要知道函数参数,返回的值类型,请问有办法,急急急!!!
- 请问用ado访问access的三层程序发布应带什么东西?(急)
- 网站 管理
- 如果上网的流量给限制了,如何知道自己已用流量?怎么减少占用流量?如何突破该限制?有相关的现成软件吗?要是自编如何编写?
- 如何获取dbgrid中所选数据行的行数?
- 在操作数据集的时候书签怎么使用呀?它的功能是什么?
就保存的是节点的信息,你可以试下,然后用LoadFromFile再提取信息
一个节点最基本的信息就是名字和两个图标索引编号。其它的数据都保存到Data中。以前都是在Data中保存一个个对象,每个对象都有ShowChildNode(ANode:TTreeNode)方法,用来显示子节点。对象都有PathStr 属性,就是路径,每一个节点都有唯一标识,就用象文件路径的方式在表中保存路径,只要给定表中对应的路径字段,就可以生成树了。 如果要生成非常多的节点,是不是在Data中保存记录会比保存对象能更快一些。
看了一下系统资源管理器,Windows是用命名空间来管理实际的文件夹和虚拟的文件夹(我的电脑,控制面版)我们是不是也应用类似的方法实现
大家有什么好的实现模式吗?
在OnLoadNode事件中读取。type
PMyRec = ^TMyRec;
TMyRec = record
ID : Integer;
Caption: String;
end;
....procedure TMainForm.VSTSaveNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
var
Data: PMyRec;
s : String;
l : Integer;
begin
with Sender do
begin
Data := GetNodeData(Node);
s:=Data.Caption;
l:=Length(s);
Stream.WriteBuffer(Data.Id,Sizeof(Integer));
Stream.WriteBuffer(l,Sizeof(Integer));
Stream.WriteBuffer(s[1],l);
end;
end;procedure TMainForm.VSTLoadNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
var
Data: PMyRec;
s : String;
l : Integer;
begin
with Sender do
begin
Data := GetNodeData(Node);
Stream.ReadBuffer(l,Sizeof(Integer));
Data.Id:=l;
Stream.ReadBuffer(l,Sizeof(Integer));
SetLength(s,l);
Stream.ReadBuffer(s[1],l);
Data.Caption:=s;
end;end;procedure TMainForm.Button2Click(Sender: TObject);
begin
VST.SaveToFile('a.VT');
end;procedure TMainForm.Button3Click(Sender: TObject);
begin
VST.LoadFromFile('a.VT');
end;