Показать сообщение отдельно
  #4  
Старый 17.01.2008, 19:37
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Восклицание Как получить список файлов из Проводника

Цитата:
Сообщение от Turbine
О реализации именно этой задачи практически нигде и ничего не сказано...
Информации много, надо только уметь и знать где искать - в DelphiWorld целый раздел есть по Drag&Drop, взял из этой статьи:
http://www.delphiworld.narod.ru/base...iles_list.html

1. Добавляем в список модулей ShellAPI
2. В описание формы раздел private:
Код:
procedure WMDropFiles(var M: TMessage); message WM_DROPFILES;
3. Пишем саму процедуру:
Код:
procedure TForm1.WMDropFiles(var M: TMessage);
var
  i, indx, CountFiles, SizeName, cch, hDrop: integer;
  wnd:HWND;
  Point: TPoint;
  lpszFile: string;
begin
  hDrop := M.WParam;
  cch:=0;
  indx:=-1;
  DragQueryPoint(hDrop, Point);
  CountFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
  // Получаем идентификатор окна над которым находиться курсор
  wnd:=ChildWindowFromPoint(Form1.Handle,Point);
  for i:=0 to Form1.ComponentCount-1 do // для всех компонентов
   if (Form1.Components[i] is TListBox) then // если это ListBox
    if (Form1.Components[i] as TListBox).Handle = Wnd then // и его Handle совпадает с полученным
     begin Indx:=i; Break; end; // запоминаем индекс компонента

  for i := 0 to CountFiles - 1 do
  begin
    SizeName := DragQueryFile(hDrop, i, nil, cch);
    SetLength(lpszFile, SizeName+1);
    DragQueryFile(hDrop, i, Addr(lpszFile[1]), SizeName+1);
    if indx <> -1 then // если нужный компонент найден - добавляем строку
    (Form1.Components[indx] as TListBox).Items.Add(lpszFile); // подразумевается, что это ListBox
    lpszFile:='';
  end;
  DragFinish(hDrop);
end;
4. В событие OnCreate формы добавляем код:
Код:
DragAcceptFiles(Handle, True);
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием