Как загрузить строку Юникода в TTreeView через TMemoryStream? - PullRequest
2 голосов
/ 11 июня 2011

Мне нужно что-то сделать со строкой Unicode дерева TTreeView, поэтому я хочу загрузить эту строку в поток памяти, а затем загрузить поток памяти в виде дерева.Как я могу это сделать?

1 Ответ

1 голос
/ 11 июня 2011

У вас будет соблазн напрямую использовать целое число TStringStream класса TMemoryStream.Но этот класс TStringStream будет кодировать UnicodeString в AnsiString перед хранением, в версии Unicode Delphi ...

Итак, вот некоторые функции для создания экземпляра TMemoryStream с чистым содержимым Unicode, а затем получения обратноэтот текст:

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, этоткод также будет работать с предыдущей версией Delphi, не поддерживающей Юникод.

...