Перетаскивание формы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Перетаскивание формы

Сообщение A.A.Z. » 04.01.2004 (Вс) 19:36

Как сделать так, чтобы можно было форму перетаскивать за любое место, я знаю.
В моём случае всю форму занимает элемент управления (Shockwave Flash), поэтому MouseMove для формы игнорируется. Как осуществить перетаскивание окна за любую часть при сложившихся обстоятельствах?
Note: свойств типа MouseDown, MouseUp и MouseMove у эл-та Shockwave Flash не имеется.
Нет меня больше

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.01.2004 (Вс) 20:06

Предлагаю:

а) отслеживаешь в таймере нахождение курсора в форме (через GetCursorPos)
б) отслеживаешь нажатие клавиши мыши через GetAsyncKeyState
в) если во время тика таймера значение "нажатости" изменилось с "-" на "+", то произошло как бы Form_MouseDown, а если с "+" на "-", то Form_MouseUp.

Исходя из полученных данных и дописывай ;)

Вроде бы всё объяснил, а?
P.S. сам бы пример написал, да времени нету :(

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 04.01.2004 (Вс) 22:59

Спасибо!
А какой-нибудь ещё способ есть? :roll:
Нет меня больше

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.01.2004 (Пн) 9:37

Ну сабклассинг ещё :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 05.01.2004 (Пн) 23:00

А что это? :roll: :oops:
Нет меня больше

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.01.2004 (Вт) 11:54

Каждое окно имеет процедуру обработки сообщений. Процедура, соответственно, имеет адрес. Заюзав функцию getwindowlong с параметром gwl_wndproc, мы узнаем адрес функции-обработчика нужного нам окна. Запомнив сию несомненно важную цифирь, мы вызываем setwindowlong с тем же gwl_wndproc, дабы подсунуть окну другой адрес функции, которая, конечно же, у нас в модуле. Теперь наша функция будет огребать все сообщения, которые шлются окну, делать оргвыводы и адекватно реагировать (в число адекватных реакций входит вызов callwindowproc со старым адресом в качестве параметра, а то как перестанет всё отрисовываться, к примеру...).
Ну ты понял смысл, я думаю :wink:
Для дальнейшего продвижения на сём славном поприще сходи на www.vbstreets.ru и из раздела с исходниками качни мой SubClasser. :wink: :wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.01.2004 (Вт) 22:38

GSerg писал(а):Ну ты понял смысл, я думаю :wink:

Не-а! Большой и толстый 0! :(
Но всё равно спасибо, за помощь и за SubClasser! :)
Нет меня больше


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 74

    TopList  
cron