Drag and Drop

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Drag and Drop

Сообщение Lumen » 29.06.2006 (Чт) 22:42

Привет!
Народ, подскажите, пожалуйста, как реализовать Drag and Drop в моей программе. Я понимаю, что боян, но всё-таки: поиск по функции DragQueryFile выдал два реультата, ни один из которых не подходит. Пытался сам сделать - ничего не выходит (форма не грузится). Объясните, плиз, что я делаю не так...

[added]

Немного исправил код, но всё равно не работает. Точнее количество "брошенных" файлов показывает, а имена файлов нет. Уважаемые гуру, помогите, плиз, разобраться. Очень надо...

[новая версия ниже]
Последний раз редактировалось Lumen 30.06.2006 (Пт) 15:25, всего редактировалось 6 раз(а).
Подпись проходит рефакторинг

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.06.2006 (Чт) 22:58

Это потому, что искать надо по слову OleDragDrop
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.06.2006 (Чт) 23:02

Классно реализован сабклассинг :lol:

А вообще что ты хотел сделать? Перетаскивание файлов на форму? так для этого не надо никаких API
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 29.06.2006 (Чт) 23:14

Я знаю, что можно сделать то же самое, установив свойство формы OLEDropMode = 1 и в событии OLE_DragDrop (...) написать что-то типа
Код: Выделить всё
Msgbox Data.Files(i)
, где i - номер перетаскиваемого файла, но у меня такая сложность: на форме (не в том примере, что я кинул, там только моя реализация Drag'nDrop :lol: ) много контролов (frame'ы, label'ы и кнопки), которые закрывают форму. Можно конечно было бы прописать в обработчиках события OLEDragDrop всех этих элементов управления выше приведённый код, но не хотелось бы. Тем более, что я делал Drag'n'Drop через API, но, к сожалению, исходники той программы безвозвратно утеряны. Если не сложно, подскажите, пожалуста, как действовать в моём примере...
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.06.2006 (Чт) 23:16

Для начала объяви константы и сделай функцию WindowProc
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 29.06.2006 (Чт) 23:19

Константы и функция в модуле..
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.06.2006 (Чт) 23:21

:shock:

Дико извиняюсь, открыл форму сразу из архива - модуль не заметил...

Классно реализован сабклассинг

Тогда это предложение не имеет смысла
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 29.06.2006 (Чт) 23:25

Хакер
Нет, кстати предложение имеет смысл :D , поскольку сабклассинг не реализован (может он и реализован, но результат реализации не устраивает...). Не подскажешь, как можно сделать в моем случае. Или если есть готовый пример, скинь пожалуйста сюда или на мыло, а то я два дня тр...сь с этой проблемой и не могу вспонить, как я раньше делал подобное...
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.06.2006 (Чт) 23:32

Lumen писал(а): я два дня тр...сь с этой проблемой


:shock: даже не знаю как это назвать.... траблафил что ли :)

Ну... я бы на самом деле юзал обычный способ. Просто ести тебе нужно перетащить файл, то имеет смысл сделать целевой контрол, который будет ловит файл (т.е. если например это текстовый редактор - то ловаить файл должно только поле ввода. а всякие там тулбоксы и меню -- соотв. не должны.) вот такая простая логика :)


Возьми к примеру создателей виндозы -- надо перетащить иконку в панель быстрого запуска. И ведь толко быстрый запуске принимает файлы - ни кнопка пуск, ни трей - они просто игнорируют драгндроп.

Прим. (в ХП пуск всё-таки ловит файлы и помещает их в верхушку меню.)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 29.06.2006 (Чт) 23:57

А как сделать, чтобы вся форма, независимо от того на какой контрол брошены файлы, принимала их. В прошлый раз я делал, приблизительно так, как в примере, за одним исключением, что там работало, а здесь нет. Подскажите кто-нить, что я делаю неправильно... Где ошибка кроме, как в ДНК? :)
ЗЫ: Вот та прога, где я подобное делал
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.06.2006 (Пт) 0:16

у тебя что там 320 контроллов, что тебе влом на все евенты навешать?

Где ошибка кроме, как в ДНК?

в РНК :lol:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 30.06.2006 (Пт) 7:13

Хакер писал(а):Прим. (в ХП пуск всё-таки ловит файлы и помещает их в верхушку меню.)

В 98 тоже ловит, и можно поместить куда угодно, не только в верхушку

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 30.06.2006 (Пт) 12:38

Кое-что исправил, но все равно не выходит. Посмотрите, пожалуста, подскажите, что сделать...
Аттач там же.
Подпись проходит рефакторинг

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 30.06.2006 (Пт) 15:33

Хакер
Количество контролов на форме - 78. Все равно влом прописывать 78 лишних event'ов. Легче один обработчик события сделать.

Покурил MSDN, вроде исправил, теперь работает. Вот работающий код:
Вложения
Drag and Drop.rar
Drag and Drop с помощью API
(2.11 Кб) Скачиваний: 93
Подпись проходит рефакторинг


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 58

    TopList