我需要对TTreeView的树的Unicode字符串执行某些操作,因此我想将此字符串加载到内存流中,然后再将内存流加载到树视图中。我怎样才能做到这一点?
最佳答案
您很想直接使用TStringStream
的TMemoryStream
类。但是这个TStringStream
类将在存储之前以Unicode Delphi版本将UnicodeString编码为AnsiString ...
因此,这里有一些函数可以创建具有纯Unicode内容的TMemoryStream
实例,然后取回此文本:
function StringToMemoryStream(const Text: string): TMemoryStream;
var Bytes: integer;
begin
if Text='' then
result := nil else
begin
result := TMemoryStream.Create;
Bytes := length(Text)*sizeof(Char);
result.Size := Bytes;
move(pointer(Text)^,result.Memory^,Bytes);
end;
end;
function MemoryStreamToString(MS: TMemoryStream): string;
begin
if MS=nil then
result := '' else
SetString(result,PChar(MS.Memory),MS.Size div sizeof(Char));
end;
请确保不再使用
Free
TMemoryStream
。通过使用
sizeof(Char)
和PChar
,此代码还将与以前的非Unicode版本的Delphi一起使用。关于string - 如何通过TMemoryStream将Unicode字符串加载到TTreeView中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6315025/