這是我在2009年德爾福工作的代碼嗎?它只是最終拋出一個堆錯誤SetAsHandle。 如果我改變它使用AnsiString類型按原來,即如何將RTF字符串複製到delphi 2009中的剪貼板?
procedure RTFtoClipboard(txt: string; rtf: AnsiString);
和
Data := GlobalAlloc(GHND or GMEM_SHARE, Length(rtf)*SizeOf(AnsiChar) + 1);
那麼有沒有錯誤,但剪貼板是空的。
全碼:
unit uClipbrd;
interface
procedure RTFtoClipboard(txt: string; rtf: string);
implementation
uses
Clipbrd, Windows, SysUtils, uStdDialogs;
VAR
CF_RTF : Word = 0;
//------------------------------------------------------------------------------
procedure RTFtoClipboard(txt: string; rtf: string);
var
Data: Cardinal;
begin
with Clipboard do
begin
Data := GlobalAlloc(GHND or GMEM_SHARE, Length(rtf)*SizeOf(Char) + 1);
if Data <> 0 then
try
StrPCopy(GlobalLock(Data), rtf);
GlobalUnlock(Data);
Open;
try
AsText := txt;
SetAsHandle(CF_RTF, Data);
finally
Close;
end;
except
GlobalFree(Data);
ErrorDlg('Unable to copy the selected RTF text');
end
else
ErrorDlg('Global Alloc failed during Copy to Clipboard!');
end;
end;
initialization
CF_RTF := RegisterClipboardFormat('Rich Text Format');
if CF_RTF = 0 then
raise Exception.Create('Unable to register the Rich Text clipboard format!');
end.
不幸的是,我確實嘗試過。在我的字符串中沒有特殊的Unicode字符,只是碰巧使用了Delphi的新字符串類型,因此也是我的問題。我已經更新了該問題,以顯示您提出的替代方案。 – 2009-05-27 20:42:07