На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> скопировать файл в буфер обмена , буфер
    Здравствуйте!
    Возникла, казалось бы, элементарная задача, но решений в интеренете нашёл только 2, и те не рабочие ((
    Нужно скопировать файл в буфер обмена, чтобы потом можно было его вставить в любую папку иксплорера, и всего-то .. имя файла имеется . вот то что нашёл в сети :

    1
    ExpandedWrap disabled
      Копируем файл в буфер обмена
       
      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.


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


    на первый пример прграмма ругается при выполнении, 2й даже не запускается (просит библиотеку KERNEL.DLL).

    Подскажите, кто делал подобное.
    ПС: файлы офисных типов (.doc, .xls, .pdf etc)
    Заранее спасибо!
    Заранее спасибо!
      1-й вариант у меня работает, если имена файлов указаны правильно:
      ExpandedWrap disabled
        CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat');


      2-й вариант - вообще не то, что тебе нужно.
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0185 ]   [ 15 queries used ]   [ Generated: 20.05.24, 21:58 GMT ]