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

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

http://delphiworld.narod.ru/ DelphiWorld 6.0 Примечание Vit: похоже это актуально только для Windows 3x

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...