Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Буфер обмена


Автор: kastron 26.10.2011, 15:04
Здравствуйте. Подскажите пожалуйста как при клике на Button1 проверить есть ли что-то в буфере обмена Windows если да и это файлы или папки то вставить их по указанному пути?

Автор: Frees 26.10.2011, 17:13
а проблема то в чем? 
где твой код, которым ты пытался решить эту задачу?

Автор: kastron 26.10.2011, 18:31
Frees, дело в том, что я даже не предлполагаю как это реализовать, класс ClipBoard позволяет только узнать тип данных, которые хранятся в буфере,а также с помощью него можно загрузить например текст в Memo или картинку в TImage, но как сохранить данные (файлы и папки например) из буфера обмена в указанную папку - ума не приложу...(

Автор: Frees 26.10.2011, 19:36
http://delphiru.ru/tips/133-get-filenames-from-clipboard.html

Автор: kastron 26.10.2011, 19:38
Спасибо, разобрался.

еще вопрос, пытаюсь скопировать в буфер выделенные файлы и папки из ShellListView - не работает

Код

var
  H:THandle;
  i:integer;
  Lst:TStringList;
begin
  Lst:=TStringList.Create;
  for i:=0 to ShellListView.Items.Count-1 do
  begin
    if ShellListView.Items.Item[i].Selected=True then
    Lst.Add(ShellListView.Folders[i].PathName);
  end;
  H:=HWND(Lst.Text);
  OpenClipboard;
  SetClipboardData(CF_HDROP, H);
  CloseClipboard;
  GlobalFree(H);
  Lst.Free;
end;

Автор: kastron 26.10.2011, 21:11
всё разобрался

Код

procedure CopyFilesToClipboard(FileList: String);
var
 DropFiles: PDropFiles;
 hGlobal: THandle;
 iLen: Integer;
begin
  iLen := Length(FileList);
  hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles) + iLen);
  if (hGlobal = 0) then
   begin
    Exit;
   end;
  DropFiles := GlobalLock(hGlobal);
  DropFiles^.pFiles := SizeOf(TDropFiles);
  Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
  GlobalUnlock(hGlobal);
  if OpenClipboard(0) then
   begin
    SetClipboardData(CF_HDROP, hGlobal);
    CloseClipboard;
   end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)