我正在撰寫一個單元,我可以在其中粘貼剪貼板中的影像并將其保存在資料庫中。如果我從 WhatsApp/Telegram Web 截屏或復制影像,該代碼實際上可以作業。
但是當我嘗試從剪貼板粘貼 PNG 或 JPG檔案時出現問題- 錯誤訊息是:
不支持的剪貼板格式
為什么此代碼適用于螢屏截圖,但不適用于 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);
uj5u.com熱心網友回復:
如果從 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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/447971.html
