VST实例(13) 存取VST
1、树结构的存储
需要进行以下三步
首先,在事件“onsavenode”中写代码,存储节点信息。
property OnSaveNode: TVTSaveNodeEvent;
TVTSaveNodeEvent = procedure (Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream) of object;
方法就是把你需要存储的节点信息写入数据流中。一种比较常见的方法是:写入数据的长度,写入数据。
例如:
procedure TForm4.vst1SaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream); var len:Integer; begin with pmultistring(Sender.GetNodeData(node))^ do begin len:=ByteLength(ms)+1; Stream.Write(Len,SizeOf(len)); Stream.Write(PChar(ms)^,len); end; end;
其次,在事件“onsavetree”中写代码(也可以不写)。
最后,调用VST.SAVETOFILE。
2、取出树结构
同样的,也应对相应的取节点数据的部分写代码,取数据的代码大致是这样的。
Stream.read(size,sizeof(integer));
Stream.read(icao,size);
以及onloadtree和vst.loadfromfile。
代码如下:
procedure TForm4.vst1LoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream); var len:integer; ps:PChar; begin with pmultistring(Sender.GetNodeData(node))^ do begin Stream.Read(len,SizeOf(Integer)); ps:=AllocMem(len); Stream.Read(ps^,len); ms:=ps; end; end;