我需要对TTreeView的树的Unicode字符串执行某些操作,因此我想将此字符串加载到内存流中,然后再将内存流加载到树视图中。我怎样才能做到这一点?

最佳答案

您很想直接使用TStringStreamTMemoryStream类。但是这个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/

10-12 19:49