У женщины-программистки есть три пути сделать себе карьеру: два спереди и один сзади!
Вот общее решение, которое будет работать, даже если у вас размер файла
превышает 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 thenbegin
hmem := GlobalAlloc(GHND, size);
if hMem <> 0 thenbegin
p := GlobalLock(hMem);
if p <> nilthenbegin
_hread(hFile, p, size);
GlobalUnlock(hMem);
Clipboard.SetAsHandle(CF_TEXT, hMem);
endelse
GlobalFree(hMem);
end;
end;
finally
FileClose(hFile);
end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
fname: string[128];
beginif OpenDialog1.Execute thenbegin
fname := OpenDialog1.Filename;
CopyFileToClipboard(fname);
end;
end;
Статья Копирование большого файла в буфер обмена раздела ОС и Железо Буфер обмена может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.