Конференция "WinAPI" » Скопировать файл в буфер обмена [D7]
 
  • Андрей (05.11.08 11:17) [0]
    Привет всем!!В общем такая ситуация надо произвольный файл(типа мр3 или ещё что) засунуть в буфер обмена а потом вставить в нужную папку эксплорером. Кто может помочь в реализации???Желательно с комментариями. Спасибо заранее.
  • Сергей М. © (05.11.08 11:35) [1]
  • Андрей (05.11.08 11:39) [2]
    Спасибо, только нужна помощь чтоб разобрать по строкам что там делается
  • Сергей М. © (05.11.08 11:40) [3]
    Цитируй непонятные строчки и спрашивай что конкретно тебе в каждой из них не понятно
  • Андрей (05.11.08 11:43) [4]
    Желательно всё. Я понял что заданный файл мы загоняем в какую то структуру и потом посредством handle переннаправляем её в буфер
  • Сергей М. © (05.11.08 12:02) [5]
    procedure CopyFilesToClipboard(FileList: string);
    var
     DropFiles: PDropFiles;
     hGlobal: THandle;
     iLen: Integer;
    begin

    //длина строки, содержащей список имен файлов
    //разделитель элементов списка - символ #0
    //конец списка - два подряд следующих символа #0
     iLen := Length(FileList) + 2;
     FileList := FileList + #0#0;

    //выделение глобально доступного блока памяти размером SizeOf(TDropFiles) + iLen
     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

    //получение вирт.адреса выделенного блока = адреса начала структуры TDropFiles
       DropFiles := GlobalLock(hGlobal);

    //заполнение структуры:
    //указание смещения начала строки с именами файлов отн-но начала структуры
       DropFiles^.pFiles := SizeOf(TDropFiles);
    //копирование строки с именами файлов по указанному смещению
       Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
    //
    //разблокировка выделенной памяти
       GlobalUnlock(hGlobal);
    //собственно "копирование" в буфер
       Clipboard.SetAsHandle(CF_HDROP, hGlobal);
     end;
    end;
  • Андрей (05.11.08 12:08) [6]
    А ТИП dropfiles что представляет собой?
  • Сергей М. © (05.11.08 12:26) [7]
    Это структура

    { format of CF_HDROP and CF_PRINTERS, in the HDROP case the data that follows
     is a double null terinated list of file names, for printers they are printer
     friendly names }

     PDropFiles = ^TDropFiles;
     {$EXTERNALSYM _DROPFILES}
     _DROPFILES = record
       pFiles: DWORD;                       { offset of file list }
       pt: TPoint;                          { drop point (client coords) }
       fNC: BOOL;                           { is it on NonClient area }
                                            { and pt is in screen coords }
       fWide: BOOL;                         { WIDE character switch }
     end;
     TDropFiles = _DROPFILES;
     {$EXTERNALSYM DROPFILES}
     DROPFILES = _DROPFILES;
 
Конференция "WinAPI" » Скопировать файл в буфер обмена [D7]
Есть новые Нет новых   [134435   +33][b:0][p:0]