![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Drag&Drop [D6, D7, Win95/98, WinXP]
~GaMeRd~ © (2003-12-26 00:16:00)Тут такое дело - надо подключить к проге драгидроп. НО.
Система какая я не понял. Нужно, чтобы перетаскивались на объект файлы и при этом я узнавал иконку этого файла и его полный путь. Короче, чтобы у меня на форме создавался ярлык к этому файлу.
Спасиба
~GaMeRd~ (2004-01-02 00:08:00) [1]Понял. Спасибо
DVM (2003-12-29 08:07:00) [2]Да, погорячился я насчет панели, сорри.
to ~GaMeRd~ ©
Переоредели оконную функцию - и обрабатывай там все сообщения, какие надо.
jack128 (2003-12-28 23:44:00) [3]То есть ты создал наследника Tpanel и обработал в нем сообщение wm_dropfiles? Ну или подменил оконную функцию?
~GaMeRd~ (2003-12-28 23:33:00) [4]Все такое же, только Хэндл другой:
DragAcceptFiles( Panel1.Handle, true);
Он-то разрешает прием только Панели, но не обрабатывает сообщение wm_dropfiles
jack128 (2003-12-28 18:41:00) [5]
> Потому как панель не является окном
???
Tpanel/TCustomPanel/TCutomControl/TWinControl
> а не работает для, допустим, ТПанел
Ты уверен? Покажи код.
DVM (2003-12-28 16:21:00) [6]
> Почему оно включается только для формы, а не работает для,
> допустим, ТПанел?
Потому как панель не является окном
~GaMeRd~ (2003-12-27 14:57:00) [7]Оно-то работает. НО.
Стоп.А что, при ФормКреате не надо разрешать перетаскивание файлов? Только выключать прием нужно?
> DragFinish(THandle(Msg.WParam));
DragAcceptFiles(Handle, true); ????
Вопрос по теме DragAcceptFiles(Handle, true);
Почему оно включается только для формы, а не работает для, допустим, ТПанел?
Pirate (2003-12-26 15:05:00) [8]Большинство программ, преднозначенных для работы с текстом, предоставляют пользователю возможность перетаскивать имена файлов из "Проводника" (или других программ) в Memo или другой компонент, содержащийся в приложении. о умолчанию Delphi не позволяет перемещать файлы с помощью мыши, но, приложив небольшие усилия, такую возможность можно реализовать.
Первое, что вы должны сделать, - сообщить системе Windows о том, что ваша программа готова обрабатывать файлы, перемещенные из другого приложения с помощью мыши. Для этого достаточно включить в обработчик события OnCreate формы следующее выражение:
DragAcceptFiles(Handle,True);
Кроме того вы должны указать модель ShellAPI в директиве uses.
Для любого окна, в котором была вызвана процедура DragAcceptFiles, справедливо следующее. Когда вы перетаскиваете имя файла на ваше приложение и отпускаете кнопку мыши, Windows посылает этому окну сообщение wm_DropFiles. Сооьщение сопровождается именем файла. Обработчик этого сообщения нужно включитьв защищенный раздел класса формы. например, в объявлении класса формы между ключвыми словами private и public добавьте следующие строки:
protected
procedure WMDropFiles (var Msg: TMessage);
message wm_DropFiles;
И наконец-то пример самой процедуры, при помощи которой будет происходить обработка файла:
protected
procedure WMDropFiles (var Msg: TMessage);
message wm_DropFiles;
И наконец-то пример самой процедуры, при помощи которой будет происходить обработка файла:
procedure TForm1.WMDropFiles(var Msg: TMessage);
Var
Filename: array[0..256] of char;
begin
DragQueryFile(THandle(Msg.WParam),0,Filename,SizeOf(Filename));
// Теперь в переменной Filename будет находиться путь
// к перетаскиваемому файлу. Далее вы можете выполнять с этим файлом, зная
// его путь, все что угодно.
//Например: Загрузить его в Memo
Memo1.lines.loadfromfile(Filename);
//Сообщаем об окончании претаскивания
DragFinish(THandle(Msg.WParam));
end;