VST实例(13) 存取VST

发布时间 2023-05-31 11:38:16作者: Luo大哥

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;