Drag&Drop

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Всем привет! Есть компонент TEdit, хочу чтоб в нем писался путь к файлу который я перетащу на него. Возможно ли это? Или может как-то по другому можно это реализовать?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

смотреть события TEdit - OnDragOver и OnDragDrop + свойства DragMode, DragKind
Изображение
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Люди! Ни как не доходит, сижу уже 2-ой час пытаюсь разобраться, дайте плиз наглядный пример, очень прошу, мне так намного понятней будет :)
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

а откуда файл тащить собираешься?
Изображение
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Тащу из папки "Мои Документы" либо с какого-нить жесткого диска или дискеты
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Можно использовать библиотеку RX, можно ниписать свое, но прийдется делать свой класс (а по-максимуму компонент).

Посмотрите как определен класс TFileDirEdit (Tooledit.pas) в библиотеке RX.

Там есть
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;

Этот метод - обработчик WM_DROPFILES - когда дропаются файлы. Структура TWMDropFiles должна быть описина в messages.pas

Кроме того, чтобы над оконным объектом появлялся нужный курсор, и ему таки-поступало сообщение WM_DropFiles надо обязательно перекрыть CreateHandle и DestroyWindowHandle.

Код: Выделить всё

procedure CreateHandle; override;
procedure TFileDirEdit.DestroyWindowHandle; override;
....
procedure TFileDirEdit.CreateHandle;
begin
  inherited CreateHandle;
  if FAcceptFiles then SetDragAccept(True);
end;

procedure TFileDirEdit.DestroyWindowHandle;
begin
  SetDragAccept(False);
  inherited DestroyWindowHandle;
end;

Можно и без создания класса обойтись

Для этого надо создать процедуру типа TWndMethod и присвоить ее свойству Edit1.WindowProc. В этой процедуре обеспечить обработку сообщения WM_DropFiles
А на Open/Close формы вызывать SetDragAccept(True/False)

Т.е. опять 2 условия надо для этого соблюсти.

См. SetDragAccept в хелпе по WinAPI.
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Алл райт! Сенькс :)
Ответить