unit uClipboardFilePaste;

{$mode objfpc}{$H+}

interface

uses
  Windows, Classes, Forms, SysUtils, ShlObj, Graphics, ExtCtrls, ClipBrd;

procedure CopyFilesToClipboardF(Sender: TObject; aFileList: string);
procedure CopyFilesToClipboardP(aFile: string);

implementation

procedure CopyFilesToClipboardF(Sender: TObject; aFileList: string);
var
  DropFiles: PDropFiles;
  hGlobal: THandle;
  iLen: integer;
begin
  iLen := Length(aFileList) + 2;
  aFileList := aFileList + #0#0;
  hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
    SizeOf(TDropFiles) + iLen);
  if (hGlobal = 0) then
    raise Exception.Create('Could not allocate memory.');
  begin
    DropFiles := GlobalLock(hGlobal);
    DropFiles^.pFiles := SizeOf(TDropFiles);
    Move(aFileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
    GlobalUnlock(hGlobal);
    OpenClipboard(TForm(Sender).Handle);
    EmptyClipboard;
    SetClipboardData(CF_HDROP,hGlobal);
    CloseClipboard;
   end;
end;

procedure CopyFilesToClipboardP(aFile: string);
var
  vJPG: TJPEGImage;
  vBMP: TImage;
begin
  vJPG:=TJPEGImage.Create;
  vBMP:=TImage.Create(nil);
  try
    vJPG.LoadFromFile(aFile);
    vBMP.Picture.Bitmap.Assign(vJPG);
    Clipboard.Assign(vBMP.Picture.Bitmap);
  finally
    vJPG.Free;
    vBMP.Free;
  end;

end;

end.

