【发布时间】:2014-08-12 09:52:02
【问题描述】:
我正在尝试以下代码,该代码应将剪贴板文本保存到 Delphi XE6 中的文本文件中。代码运行良好,但在输出文件中仅生成垃圾值,即使剪贴板包含复制的文本片段也是如此。如何更改代码才能正常工作?
function SaveClipboardTextDataToFile(
sFileTo : string ) : boolean;
var
ps1,
ps2 : PChar;
dwLen : DWord;
tf : TextFile;
hData : THandle;
begin
Result := False;
with Clipboard do
begin
try
Open;
if( HasFormat( CF_TEXT ) ) then
begin
hData :=
GetClipboardData( CF_TEXT );
ps1 := GlobalLock( hData );
dwLen := GlobalSize( hData );
ps2 := StrAlloc( 1 + dwLen );
StrLCopy( ps2, ps1, dwLen );
GlobalUnlock( hData );
AssignFile( tf, sFileTo );
ReWrite( tf );
Write( tf, ps2 );
CloseFile( tf );
StrDispose( ps2 );
Result := True;
end;
finally
Close;
end;
end;
end;
【问题讨论】:
-
使用
TStringList...List.Text:= Clipboard.AsText; List.SaveToFile('C:\MyFile.txt');会更容易 -
-
你从哪里得到这个代码?这真的很恶心。永远值得记住的是,如果你从互联网上吸取 15 年前的代码,那可能是不合适的。在这种情况下,您遇到了 Unicode 和遗留 IO。以及毫无意义的低级 Win32 api 调用。哦,尝试是在错误的地方。必须在资源获取之后而不是之前。这里的教训是不要在不了解代码的情况下复制代码。
标签: delphi delphi-xe6