ecco la soluzione:
codice:
procedure TForm1.CopyFilesToClipboard(FileList: string);
var
DropFiles: PDropFiles;
hGlobal: THandle;
iLen: Integer;
ADropEffectFormat: Cardinal;
ADropEffect: PCardinal;
begin
iLen := Length(FileList) + 2;
FileList := FileList + #0#0;
OpenClipboard(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(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
SetClipboardData(CF_HDROP, hGlobal);
GlobalUnlock(hGlobal);
end;
ADropEffectFormat := RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT); // CFSTR_PREFERREDDROPEFFECT = 'Preferred DropEffect'
hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, sizeof(dword));
ADropEffect := GlobalLock(hGlobal);
ADropEffect^ := 2; // 2 if cut or 1 if copy
SetClipboardData(ADropEffectFormat, hGlobal);
GlobalUnlock(hGlobal);
CloseClipboard;
end;
ciao