Delphi XEでは、クリップボードからCF_UNICODETEXTデータをキャプチャしています。結果は、2つのヌルバイトで終了するストリームです。クリップボードにコピーされた実際の文字列を取得するには、nullを取り除く必要があります。
この似たような質問には、TMemoryStreamからDelphiのUnicode文字列に変換するための優れた方法が含まれています。
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, M.Size div SizeOf(Char));
end;
ただし、私の場合、これにより、末尾のnullを含む文字列が生成されます。サイズを制限することでそれを修正できます:
function ClipboardMemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, (M.Size - SizeOf(Char)) div SizeOf(Char));
end;
...しかし、これは醜い、「特別な場合」に感じます。これをコード化するためのよりクリーンな方法があるのではないかと思います。そうすれば、後でコードを見る人(私!)がすぐに「なぜ末尾の文字がストリームから削除されるのですか?」
編集:質問を先取りする1つの方法は、コメントを追加することです。しかし、それ以外は?