我正在按照本教程的说法来保存和加载我的VirtualStringTree:http://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus 我现在的问题是,当我保存并加载时,我的数据已损坏。字符已更改并添加。那么有谁知道问题是什么?
答案 0 :(得分:2)
我找到了这个Link并更改了awnser以适合我的代码。
Data.Symbol[1] //Simply points to a char. So I changed it to 'char'
读:
Stream.Read(Len, SizeOf(Len));
SetLength(Data.Column0, Len);
Stream.Read(PChar(Data.Column0)^, Len * SizeOf(Char));
//Copy/Paste this code for all Columns
写:
Len := Length(Data.Column0);
Stream.Write(Len, SizeOf(Len));
Stream.Write(PChar(Data.Column0)^, Length(Data.Column0) * SizeOf(Char));
//Copy/Paste this code for all Columns
TLama的第二个回答:
读:
var
TreeData: PTreeData;
BinaryReader: TBinaryReader;
begin
TreeData := Sender.GetNodeData(Node);
BinaryReader := TBinaryReader.Create(Stream);
try
TreeData.Column0 := BinaryReader.ReadString;
TreeData.Column1 := BinaryReader.ReadString;
TreeData.Column2 := BinaryReader.ReadString;
finally
BinaryReader.Free;
end;
end;
写:
var
TreeData: PTreeData;
BinaryWriter: TBinaryWriter;
begin
TreeData := Sender.GetNodeData(Node);
BinaryWriter := TBinaryWriter.Create(Stream);
try
BinaryWriter.Write(TreeData.Column0);
BinaryWriter.Write(TreeData.Column1);
BinaryWriter.Write(TreeData.Column2);
finally
BinaryWriter.Free;
end;
end;
我实施了TLama的答案,因为我真的无法为所有指针烦恼。这段代码看起来好多了,阅读起来容易得多,占用的空间也少了。
总而言之。当您在网上搜索保存您的VST数据时,您将获得大量垃圾代码。第一个答案将为您修复该代码。第二个会让你微笑:)