粘贴 PNG/JPG 个文件时不支持剪贴板格式
Unsupported clipboard format when pasting PNG/JPG files
我正在编写一个单元,我可以在其中粘贴剪贴板中的图像并将其保存在数据库中。如果我从 WhatsApp/Telegram Web.
截取屏幕截图或复制图像,代码实际上可以工作
但是当我尝试从剪贴板粘贴 PNG 或 JPG 文件 时出现问题 - 错误消息是:
Unsupported clipboard format
为什么此代码适用于屏幕截图而不适用于 PNG 或 JPG 文件?我该如何解决?
BMP := TBitmap.Create;
BMP.Assign(Clipboard); //Here is where I got the exception
BMP.PixelFormat := pf32bit;
JPG := TJPEGImage.Create;
JPG.Assign(BMP);
JPG.CompressionQuality := 75;
AdvOfficeImage1.Picture.Assign(JPG);
如果您从 shell 复制文件,剪贴板将不包含文件的内容,而只包含文件名。
因此,您需要获取此文件名,然后使用它来加载您的图像。
这是一个小例子,只包含一个 TImage
控件:
procedure TForm1.FormClick(Sender: TObject);
begin
if Clipboard.HasFormat(CF_HDROP) then
begin
Clipboard.Open;
try
var LDrop := Clipboard.GetAsHandle(CF_HDROP);
if LDrop <> 0 then
begin
var LFileCount := DragQueryFile(LDrop, $FFFFFFFF, nil, 0);
if LFileCount = 1 then
begin
var LSize := DragQueryFile(LDrop, 0, nil, 0);
if LSize <> 0 then
begin
var LFileName: string;
SetLength(LFileName, LSize);
if DragQueryFile(LDrop, 0, PChar(LFileName), LFileName.Length + 1) <> 0 then
Image1.Picture.LoadFromFile(LFileName);
end;
end;
end;
finally
Clipboard.Close;
end;
end;
end;
注:Clipboard
在Clipbrd
中声明,DragQueryFile
在ShellAPI
中声明。
我正在编写一个单元,我可以在其中粘贴剪贴板中的图像并将其保存在数据库中。如果我从 WhatsApp/Telegram Web.
截取屏幕截图或复制图像,代码实际上可以工作但是当我尝试从剪贴板粘贴 PNG 或 JPG 文件 时出现问题 - 错误消息是:
Unsupported clipboard format
为什么此代码适用于屏幕截图而不适用于 PNG 或 JPG 文件?我该如何解决?
BMP := TBitmap.Create;
BMP.Assign(Clipboard); //Here is where I got the exception
BMP.PixelFormat := pf32bit;
JPG := TJPEGImage.Create;
JPG.Assign(BMP);
JPG.CompressionQuality := 75;
AdvOfficeImage1.Picture.Assign(JPG);
如果您从 shell 复制文件,剪贴板将不包含文件的内容,而只包含文件名。
因此,您需要获取此文件名,然后使用它来加载您的图像。
这是一个小例子,只包含一个 TImage
控件:
procedure TForm1.FormClick(Sender: TObject);
begin
if Clipboard.HasFormat(CF_HDROP) then
begin
Clipboard.Open;
try
var LDrop := Clipboard.GetAsHandle(CF_HDROP);
if LDrop <> 0 then
begin
var LFileCount := DragQueryFile(LDrop, $FFFFFFFF, nil, 0);
if LFileCount = 1 then
begin
var LSize := DragQueryFile(LDrop, 0, nil, 0);
if LSize <> 0 then
begin
var LFileName: string;
SetLength(LFileName, LSize);
if DragQueryFile(LDrop, 0, PChar(LFileName), LFileName.Length + 1) <> 0 then
Image1.Picture.LoadFromFile(LFileName);
end;
end;
end;
finally
Clipboard.Close;
end;
end;
end;
注:Clipboard
在Clipbrd
中声明,DragQueryFile
在ShellAPI
中声明。