Советы по Delphi


Копирование большого файла в буфер обмена


Вот общее решение, которое будет работать, даже если у вас размер файла превышает 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]



Содержание раздела