У женщины-программистки есть три пути сделать себе карьеру: два спереди и один сзади!
Вот общее решение, которое будет работать, даже если у вас размер файла
превышает 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, которая копирует содержимое файла в буфер обмена в виде plain текста. Ограничение размера файла преодолевается с помощью функции _hread, которая читает данные из файлового хендла в буфер.
Разбивка кода:
function _hread(FileHandle: word; BufPtr: pointer; ByteCount: longint): longint; far; external 'KERNEL' index 349;
Это внешняя функция из ядра Windows, которая читает данные из файлового хендла в буфер.
This is an event handler for a speed button on a form. When clicked, it opens a file dialog to select a file, copies its contents to the clipboard using the CopyFileToClipboard procedure, and then closes the file.
Код seems to be well-written and should work as expected. However, I would suggest adding some error handling to handle cases where the file cannot be opened or read, or if there is an issue with allocating memory. Additionally, it might be a good idea to free the memory block after using it to avoid memory leaks.
Копирование большого файла в буфер обмена позволяет использовать функцию _hread для считывания файлов размером более 64 КБ и записи их в буфер обмена с помощью процедуры CopyFileToClipboard.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.