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



Автор: Peter Below

У женщины-программистки есть три пути сделать себе карьеру: два спереди и один сзади!

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


Далее: Копирование в буфер обмена »»