Копирование большого файла в буфер обмена
Вот общее решение, которое будет работать, даже если у вас размер файла превышает 64Кб:
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; |
- Peter Below [000799]