Копирование большого файла в буфер обмена |
Previous Top Next |
Вот общее решение, которое будет работать, даже если у вас размер файла превышает 64Кб:
Code: |
function _hread(FileHandle: word; BufPtr: pointer; ByteCount: longint): longint; far; external 'KERNEL' index 349;
procedure CopyFileToClipboard(const fname: string); var hmem, hFile: THandle; size: LongInt; p: Pointer; begin hFile := FileOpen(fname, fmOpenRead); try size := FileSeek(hFile, 0, 2); FileSeek(hfile, 0, 0); if size > 0 then begin hmem := GlobalAlloc(GHND, size); if hMem <> 0 then begin p := GlobalLock(hMem); if p <> nil then begin _hread(hFile, p, size); GlobalUnlock(hMem); Clipboard.SetAsHandle(CF_TEXT, hMem); end else GlobalFree(hMem); end; end; finally FileClose(hFile); end; end;
procedure TForm1.SpeedButton2Click(Sender: TObject); var fname: string[128]; begin if OpenDialog1.Execute then begin fname := OpenDialog1.Filename; CopyFileToClipboard(fname); end; end;
|
©Drkb::01894
DelphiWorld 6.0
Примечание Vit: похоже это актуально только для Windows 3x