![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте! Простите за глупый, быть может, вопрос, но ответа не удалось найти во других темах.
Как добиться, чтобы перетаскивание файла на контроль (например ListView) (а не Form) из Проводника приводило к добавлению элемента с именем файла в ListView). Везде приводится пример, где получатель форма. Комментарий: Смотрел книги Озерова. Там тоже рассмотрены исключительно примеры, когда файл воспринимает форма. Пробовал указывать другие хэндлы в DragAcceptFiles(Handle,True) и не только. Никакого результата. Последний раз редактировалось Turbine, 17.01.2008 в 14:50. |
#2
|
||||
|
||||
![]() Ну и пусть она будет получателем! Вот при получении и добавляй имя файла в ListView.
Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#3
|
|||
|
|||
![]() Просто планировалось реализровать механизм, когда можно накидывать разные файлы одного типа в разные листбоксы, чтобы потом не сортировать и не заводить лишние диалоги "куда добавить?"
О реализации именно этой задачи практически нигде и ничего не сказано... Т.е. воду в ступе, вроде не толчем. Последний раз редактировалось Turbine, 17.01.2008 в 15:26. |
#4
|
||||
|
||||
![]() Цитата:
http://www.delphiworld.narod.ru/base...iles_list.html 1. Добавляем в список модулей ShellAPI 2. В описание формы раздел private: Код:
procedure WMDropFiles(var M: TMessage); message WM_DROPFILES; Код:
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; Код:
DragAcceptFiles(Handle, True); Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#5
|
|||
|
|||
![]() Данный пример ищет первый принадлежащий форме листбокс и на этом успокаивается
А если на форме несколько ListBox ов и нужно добавлять именно в тот на котором был отпущен курсор мыши... Что делать тогда? Последний раз редактировалось Turbine, 19.01.2008 в 18:59. |
#6
|
|||
|
|||
![]() Очевидно, Turbine всё-таки проверил код в Delphi и убедился, что он работает.
![]() Большое спасибо Rokuell за отличный пример! |