В Delphi XE я собираю данные CF_UNICODETEXT из буфера обмена. Результатом является поток, который заканчивается двумя нулевыми байтами. Чтобы получить фактическую строку, которая была скопирована в буфер обмена, мне нужно удалить нули.
Этот аналогичный вопрос содержит хороший метод преобразования из TMemoryStream в строку Unicode Delphi:
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, M.Size div SizeOf(Char));
end;
В моем случае, однако, это приведет к появлению строки, содержащей завершающие нули. Я мог бы это исправить, ограничив размер:
function ClipboardMemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, (M.Size - SizeOf(Char)) div SizeOf(Char));
end;
... но это выглядит ужасно, "особый случай". Интересно, есть ли более чистый способ кодирования этого, чтобы кто-нибудь (я!), Взглянув на код позже, не сразу спросил: «Почему конечный символ удаляется из потока?»
Редактировать: Одним из способов упреждения вопроса является добавление комментария. Но кроме этого?