Drag&Drop
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Всем привет! Есть компонент TEdit, хочу чтоб в нем писался путь к файлу который я перетащу на него. Возможно ли это? Или может как-то по другому можно это реализовать?
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
смотреть события TEdit - OnDragOver и OnDragDrop + свойства DragMode, DragKind

-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Люди! Ни как не доходит, сижу уже 2-ой час пытаюсь разобраться, дайте плиз наглядный пример, очень прошу, мне так намного понятней будет 

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
а откуда файл тащить собираешься?

-
- Сообщения: 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.
Можно и без создания класса обойтись
Для этого надо создать процедуру типа TWndMethod и присвоить ее свойству Edit1.WindowProc. В этой процедуре обеспечить обработку сообщения WM_DropFiles
А на Open/Close формы вызывать SetDragAccept(True/False)
Т.е. опять 2 условия надо для этого соблюсти.
См. SetDragAccept в хелпе по WinAPI.
Посмотрите как определен класс 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.
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Алл райт! Сенькс 
