Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.01.2008, 14:02
Turbine Turbine вне форума
Прохожий
 
Регистрация: 17.01.2008
Сообщения: 6
Репутация: 10
По умолчанию Drag & Drop на контроль, а не на форму

Здравствуйте! Простите за глупый, быть может, вопрос, но ответа не удалось найти во других темах.

Как добиться, чтобы перетаскивание файла на контроль (например ListView) (а не Form) из Проводника приводило к добавлению элемента с именем файла в ListView).

Везде приводится пример, где получатель форма.

Комментарий:
Смотрел книги Озерова. Там тоже рассмотрены исключительно примеры, когда файл воспринимает форма.
Пробовал указывать другие хэндлы в DragAcceptFiles(Handle,True) и не только. Никакого результата.

Последний раз редактировалось Turbine, 17.01.2008 в 14:50.
Ответить с цитированием
  #2  
Старый 17.01.2008, 15:12
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

Ну и пусть она будет получателем! Вот при получении и добавляй имя файла в ListView.
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #3  
Старый 17.01.2008, 15:18
Turbine Turbine вне форума
Прохожий
 
Регистрация: 17.01.2008
Сообщения: 6
Репутация: 10
По умолчанию

Просто планировалось реализровать механизм, когда можно накидывать разные файлы одного типа в разные листбоксы, чтобы потом не сортировать и не заводить лишние диалоги "куда добавить?"

О реализации именно этой задачи практически нигде и ничего не сказано... Т.е. воду в ступе, вроде не толчем.

Последний раз редактировалось Turbine, 17.01.2008 в 15:26.
Ответить с цитированием
  #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
Ответить с цитированием
  #5  
Старый 18.01.2008, 13:42
Turbine Turbine вне форума
Прохожий
 
Регистрация: 17.01.2008
Сообщения: 6
Репутация: 10
По умолчанию

Данный пример ищет первый принадлежащий форме листбокс и на этом успокаивается
А если на форме несколько ListBox ов и нужно добавлять именно в тот на котором был отпущен курсор мыши...

Что делать тогда?

Последний раз редактировалось Turbine, 19.01.2008 в 18:59.
Ответить с цитированием
  #6  
Старый 09.12.2008, 15:52
theIggs theIggs вне форума
Прохожий
 
Регистрация: 09.12.2008
Сообщения: 1
Репутация: 10
По умолчанию

Очевидно, Turbine всё-таки проверил код в Delphi и убедился, что он работает. У меня в CodeGear RAD Studio 2009 тоже работает.
Большое спасибо Rokuell за отличный пример!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter