Страница 1 из 1

Drag&Drop

Добавлено: 15 мар 2005, 07:11
Dr.Grizzly
Всем привет! Есть компонент TEdit, хочу чтоб в нем писался путь к файлу который я перетащу на него. Возможно ли это? Или может как-то по другому можно это реализовать?

Добавлено: 15 мар 2005, 16:41
Игорь Акопян
смотреть события TEdit - OnDragOver и OnDragDrop + свойства DragMode, DragKind

Добавлено: 16 мар 2005, 10:12
Dr.Grizzly
Люди! Ни как не доходит, сижу уже 2-ой час пытаюсь разобраться, дайте плиз наглядный пример, очень прошу, мне так намного понятней будет :)

Добавлено: 16 мар 2005, 10:58
Игорь Акопян
а откуда файл тащить собираешься?

Добавлено: 16 мар 2005, 14:58
Dr.Grizzly
Тащу из папки "Мои Документы" либо с какого-нить жесткого диска или дискеты

Добавлено: 17 мар 2005, 01:50
Naeel Maqsudov
Можно использовать библиотеку 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.

Добавлено: 17 мар 2005, 07:46
Dr.Grizzly
Алл райт! Сенькс :)