Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: апрель 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



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

Автор: 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;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS