Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , ОС и Железо , Буфер обмена

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


uses
  ShlObj, ClipBrd; 

procedure CopyFilesToClipboard(FileList: string); 
var 
  DropFiles: PDropFiles; 
  hGlobal: THandle; 
  iLen: Integer; 
begin 
  iLen := Length(FileList) + 2; 
  FileList := FileList + #0#0; 
  hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, 
    SizeOf(TDropFiles) + iLen); 
  if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.'); 
  begin 
    DropFiles := GlobalLock(hGlobal); 
    DropFiles^.pFiles := SizeOf(TDropFiles); 
    Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen); 
    GlobalUnlock(hGlobal); 
    Clipboard.SetAsHandle(CF_HDROP, hGlobal); 
  end; 
end; 

// Example, Beispiel: 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat'); 
end;  

//Separate the files with a #0.

Перевод контента на русский язык:

Это программное обеспечение Delphi, которое копирует список путей к файлам в буфер обмена с помощью единиц ShlObj и ClipBrd. Вот разбивка кода:

Главная процедура: CopyFilesToClipboard

  • Эта процедура принимает строковый параметр FileList, содержащий список путей к файлам, разделенных символом #0.
  • Она выделяет память для структуры TDropFiles и инициализирует ее длиной списка путей к файлам плюс 2 (для терминатора #0#0).
  • Затем процедура копирует список путей к файлам в выделенную память, за которым следует терминатор #0#0.
  • Наконец, она устанавливает handle буфера обмена с помощью метода Clipboard.SetAsHandle.

Пример кода: Button1Click

  • Это обработчик события клика кнопки на форме (TForm1).
  • Когда кнопка кликается, она вызывает процедуру CopyFilesToClipboard с двумя путями к файлам в виде строки: 'C:\Bootlog.Txt' и 'C:\AutoExec.Bat', разделенными символом #0.

Альтернативное решение

Если вы хотите копировать несколько файлов в буфер обмена без конкатенации их с помощью #0, можно использовать массив путей к файлам вместо. Вот обновленная версия процедуры:

procedure CopyFilesToClipboard(FileList: TArray<string>);
var
  DropFiles: PDropFiles;
  hGlobal: THandle;
  iLen: Integer;
begin
  iLen := Length(FileList) * (SizeOf(UTF8Char) + 1);
  hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles) + iLen);
  if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.');

  DropFiles := GlobalLock(hGlobal);
  DropFiles^.pFiles := SizeOf(TDropFiles);
  for i := 0 to High(FileList) do
    Move(PChar(FileList[i]), (PChar(DropFiles) + SizeOf(TDropFiles))^, Length(FileList[i]) * SizeOf(UTF8Char));

  GlobalUnlock(hGlobal);
  Clipboard.SetAsHandle(CF_HDROP, hGlobal);
end;

В этой версии процедура принимает массив путей к файлам (TArray<string>) и перебирает его для копирования каждого пути к файлу в выделенную память. Это позволяет копировать несколько файлов без конкатенации их с помощью #0.

Примечание: код предполагает, что пути к файлам закодированы в UTF-8. Если ваши пути к файлам используют другой формат кодировки, вам может потребоваться изменение кода соответствующим образом.

В статье описывается программный код на Delphi, который позволяет копировать файлы в буфер обмена для последующего пастирования в любое приложение, поддерживающее обмен данными.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Буфер обмена ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:56:09/0.0035960674285889/0