Как отловить положение курсора мыши на форме?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Как отловить положение курсора мыши на форме?

Сообщение ДубВовщэ » 28.05.2003 (Ср) 5:58

Как отловить положение курсора мыши на форме? А, вернее, мне надо отследить, что указатель находится над конкретным контролом.

Спасибо.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Re: Как отловить положение курсора мыши на форме?

Сообщение Cyrax » 28.05.2003 (Ср) 6:44

ДубВовщэ писал(а):Как отловить положение курсора мыши на форме? А, вернее, мне надо отследить, что указатель находится над конкретным контролом.

Спасибо.


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

Welcome to IRC

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Re: Как отловить положение курсора мыши на форме?

Сообщение ДубВовщэ » 28.05.2003 (Ср) 7:24

Cyrax писал(а):смотри событие MouseMove формы и контрола. там в качестве параметров передаются координаты курсора.


Это то понятно. Непонятно, как поймать момент, когда мышь съехала с контрола и когда наехала на него :?:

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 28.05.2003 (Ср) 7:40

Код: Выделить всё
If X > 0 And X < Control.Width And Y > 0 And Y < Control.Height Then
    ' Курсор над контролом
End If
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Сообщение ДубВовщэ » 28.05.2003 (Ср) 7:45

А что, при сходе курсора с контрола значения X и Y станут равными 0?

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

Сообщение GSerg » 28.05.2003 (Ср) 7:59

Товарищи, у вас неверный подход :)
Событие MouseMove возникает, если мышь над контролом, и не возникает, если нет. Соответственно отслеживать уход-приход мыши с помощью MouseMove бесполезно. Для этого есть TrackMouseEvent.

API-Guide уже скачан, конечно? :wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 28.05.2003 (Ср) 8:00

ДубВовщэ писал(а):А что, при сходе курсора с контрола значения X и Y станут равными 0?


ну и вопросы у вас, молодой человек...

у каждого контрола есть как бы своя локальная система координат, которая начинается в левом верхнем углу контрола и заканчивается в правом нижнем. естественно когда мышь над контролом координаты X и Y будут лежать в пределах 0...Control.Width и 0...Control.Height. а когда мышь уходит с контрола, возникает последнее событие Control_MouseMove и X либо Y выйдут за пределы диапазонов. как раз это мы и проверяем.

p.s. блин, Cyrax! ты хоть сам-то понял, что сказал? :wink:
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Сообщение ДубВовщэ » 28.05.2003 (Ср) 8:27

GSerg писал(а):Товарищи, у вас неверный подход :)
Событие MouseMove возникает, если мышь над контролом, и не возникает, если нет. Соответственно отслеживать уход-приход мыши с помощью MouseMove бесполезно. Для этого есть TrackMouseEvent.

API-Guide уже скачан, конечно? :wink:


А по подробней про TrackMouseEvent можно?
И где скачать API-Guide?

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

Сообщение GSerg » 28.05.2003 (Ср) 8:36

Можно тут. А можно и тут.

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

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Сообщение ДубВовщэ » 28.05.2003 (Ср) 9:08

GSerg,
СЭНГЗ :D

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Сообщение ДубВовщэ » 28.05.2003 (Ср) 10:36

Блин! Все равно ни так, ни так не получается! :(

Может, есть у кого ещё идей :?:

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 28.05.2003 (Ср) 10:39

ДубВовщэ писал(а):Блин! Все равно ни так, ни так не получается! :(

Может, есть у кого ещё идей :?:

все зависит от того, что ты хочеш сделать

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

Welcome to IRC

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Сообщение ДубВовщэ » 28.05.2003 (Ср) 11:02

Cyrax писал(а):все зависит от того, что ты хочеш сделать

ты бы пояснил задачу...

Лагно.
Я тут постил недавно про отлов события прокрутки колеса мышки. Воспользовался предложенным примером. Всё получилось, но не совсем красиво - при определенных условиях передаю контролу фокус (или контрол получает фокус по клику мышки - неважно), а в обработчике колесика проверяю, стоит ли на моем контроле фокус и, если да, прокручиваю контрол. Но... :( , конрол прокручивается при любых координатах курсора мышки, лишь бы были на форме.
Вот я и озадачился, а как сделать так, чтобы скролинг контрола был бы только тогда, когда курсор мышки находится над этим контролом и выключался бы при "уходе" оного с него :?: :?: :?:

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 28.05.2003 (Ср) 11:10

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

Welcome to IRC

ДубВовщэ
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 26.05.2003 (Пн) 14:13
Откуда: из лесу, вестимо...

Сообщение ДубВовщэ » 28.05.2003 (Ср) 11:29

Упс :lol:

Ну я - ДУБ, вовщэ!!!

Всё получилось. Завел булевскую глобальную переменную и в событиии мувинга мыши контрола присваиваю ей ТРУ, в оном событии формы - присваиваю ей ФЛСЕ. А в событии колеса проверяю её

У-Р-Я ! ! !


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

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

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

    TopList