Как перехватить клик мыши.

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

Как перехватить клик мыши.

Сообщение АндрейБ » 18.05.2012 (Пт) 16:48

У меня маленькая справочная форма открывается поверх основной формы в модальном режиме при клике на определенные конролы:
Код: Выделить всё
Form.Show vbModal
Хочу закрыть эту справочную форму кликом мыши в область не этой формы, а кликом в любое место на экране.
Я пробовал так (на обе кливаши мыши):
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
vButton = Button
Select Case Button
Case 1
Unload Me
Case 2
Unload Me
End Select
End Sub
Не работает!

Но работает перехват клавиш клавиатуры:
Код: Выделить всё
Private Sub Form_KeyPress(KeyAscii As Integer)
Unload Me
End Sub

Как перехватить клик мыши?

[Хакер] :: В следующий раз за неиспользование оформления ты будешь наказан!
Кто ищет, тот всегда найдет ...

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

Re: Как перехватить клик мыши.

Сообщение Хакер » 19.05.2012 (Сб) 0:12

Я не знаю.
Можно говорить, что люди задают идиотские вопросы, потому что они не знают, и в этом нет ничего криминального, потому что все когда-то были незнающими. Согласен.

Но я в большинстве случаев наблюдаю корреляцию между степенью примитивности вопроса и не связанными со знаниями чертами автора. Люди, задающие глупые вопросы и/или задумавшие сделать что-нибудь адово несусветное как правило, не только мало знают, но ещё и пишут с ошибками. Или, как в данном случае, не оформляют код тегом [code]. Вот здесь на форуме есть люди, которые регистрируются, и сразу используют тег [code], а некоторые ещё (без всяких подсказок) находят местный тег [icode] и используют для выделения инлайн-кода. Потому что душа просит, и сердце разрывается от вида неоформленных постов.

А есть люди, у которых душа ничего не просит. Ни оформления постов, ни правописания. И вопросы у них как правило идиотские. И за многие годы прогресса у них никакого.

________________

Во-первых, не надо придумывать дурь. Смысл модального окна в том, что пока с ним не разделаешься — от него не избавишься. Нельзя просто закрыть уйти от него, попытавшись перескочить на другое. Когда программисту нужно такое окно, от которого пользователю не уйти и не избавиться, не разделавшись с ним (выбрав или введя в нём что-либо), тогда программист выбирает модальное окно.

Если программисту нужно, чтобы от окно можно было избавиться просто кликнув где-то в стороне, он, и это очевидно, не должен использовать модальное окно. В противном случае у него вакуум вместо мозга.

Фен, который не сушит?
Изображение

Мыло, не содержащее мыло?
Изображение

В этот список смело можно добавлять модальное окно, которое можно закрыть, переключившись на другое окно. Это — идиотизм.
Поэтому достаточно делать немодельное окно, ловить его событие Deactivate и убирать его в обработчике этого события.

Во-вторых, в Windows нигде не применяется такой подход, как закрытие окна кликом за его пределами. Нигде. И не нужно делать этого, потому что опытные пользователи придут в ярость от такого, а неопытные — привыкнут и возможно даже полюбят столь неправильный и противоестественный приём из области проектирования пользовательского интерфейса.

Единственный случай, когда что-то исчезает при клике за его пределами, это всплывающие подсказки. Ну тогда в этом случае и надо использовать всплывающие подсказки, а не городить какую-то тухлую конструкцию с помощью Show vbModal.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4267
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как перехватить клик мыши.

Сообщение iGrok » 19.05.2012 (Сб) 0:39

Хакер писал(а):Единственный случай, когда что-то исчезает при клике за его пределами, это всплывающие подсказки.

Ты, видимо, всплывающее меню имел в виду?
Потому что подсказки обычно скрываются не по клику, а по отведению мыши в сторону, а единственное окно, которое действительно ведёт себя именно так, это всплывающее меню.
label:
cli
jmp label

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

Re: Как перехватить клик мыши.

Сообщение Хакер » 19.05.2012 (Сб) 1:19

iGrok писал(а):Потому что подсказки обычно скрываются не по клику, а по отведению мыши в сторону, а единственное окно, которое действительно ведёт себя именно так, это всплывающее меню.

По клику они тоже скрываются, — проверь.
По клику вне зоны скрывается всё pop-up-ное: pop-up меню, pop-up тултипы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.05.2012 (Сб) 9:57

Хакер писал(а):Во-вторых, в Windows нигде не применяется такой подход, как закрытие окна кликом за его пределами. Нигде.

А мне такое где-то попадалось... Кажется, какая-то форма для ввода лицензионного ключа. Щелчок по любому месту основного окна (которое было затенённым) срабатывал как отмена.

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

Re: Как перехватить клик мыши.

Сообщение Хакер » 19.05.2012 (Сб) 13:04

Ну и? Попасться может всё, что угодно, горе-программистов к сожалению больше, чем нормальных, сейчас. Речь же не в том, то такое существует в природе в единичных экземплярах, а о том, что это не является привычным поведением для Windows, не соответствует «принципу наименьшего удивления». Это веб-овский подход.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.05.2012 (Сб) 15:26

Хакер писал(а):Это веб-овский подход.

Не понял...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1943
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как перехватить клик мыши.

Сообщение ger_kar » 19.05.2012 (Сб) 17:06

Qwertiy писал(а):А мне такое где-то попадалось...
Хакер писал(а):Ну и? Попасться может всё, что угодно
Мне тоже приходилось такое встречать, в одном случае это было очень удобно, а в другом это просто жутко доставало.Стандартное поведение оно конечно хорошо и удобно, но это тоже бывает далеко не во всех случаях. Я думаю, что если случай шибко не стандартный, то для обеспечения удобства можно и нестандартный подход использовать, но делать это надо крайне осмотрительно.
____________________________________
<==PS.Оказывается сегодня исполнился ровно год с момента моего появления на форуме :)
Бороться и искать, найти и перепрятать

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как перехватить клик мыши.

Сообщение АндрейБ » 21.05.2012 (Пн) 10:47

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

Наказать можете сейчас. Желания заходить на этот форум у меня пропало.
Кто ищет, тот всегда найдет ...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 21.05.2012 (Пн) 15:49

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

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1943
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как перехватить клик мыши.

Сообщение ger_kar » 21.05.2012 (Пн) 17:50

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

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как перехватить клик мыши.

Сообщение АндрейБ » 22.05.2012 (Вт) 11:00

Мне не критика не нравиться, а оскорбления! - это господа разные вещи. И не надо мещать все в одну кучу: прямоту и хамство.
Человек не знает мой уровень образование в программирование, какое мой основной род деятельности, ту автоматизацию которую я сейчас пишу,
смысл той задачи которуя я хочу реализовать. Возможно у меня есть недостаток знаний и понимания процессов в данной области, но я постепенно повышаю свой уровень, у меня получается, мне нравиться и я хочу этим заниматься и дальше, .
И вообще я пишу вопросы в форуме для начинающих а не для профи, помоему этого достаточно что бы вести себя корректно (даже если вопросы для кого-то кажуться идиотскими).
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как перехватить клик мыши.

Сообщение АндрейБ » 23.05.2012 (Ср) 14:32

сделал с Deactivate без модального окна, просто у меня основная форма с Msflexgrid перехватывала движение мыши, что бы курсос плавал по строкам контрола, и когда я открывал форму не в модальном режиме она сразу проподала, пришлось немного поработать с алгоритмом. Все работает "почти как хотелось".
Всем спасибо.
Кто ищет, тот всегда найдет ...


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

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

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

    TopList