Как узнать, не нажаты ли 2 кнопки мыши на кнопке?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 19.11.2004 (Пт) 12:17

MouseDown() - событие такое есть. Только там такая хитрость, что ты не получишь никогда одного события для нажатия 2 кнопок мыши сразу. Ты получишь 2 события, по одному на каждую кнопку. Так что там надо флаг нажатости делать, а контролировать его в MouseDown() и MouseUp().

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 19.11.2004 (Пт) 12:36

Брательник. Я тут с утра после весёлой ночи, так что код оптимизировать не успел. :) Сорри. Но пашет - 100%

Пихай в форму и жми страт. 8)

Код: Выделить всё
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Do
If GetAsyncKeyState(1) <> 0 And GetAsyncKeyState(2) <> 0 Then
Me.Caption = "Нажаты обе"
Else
If GetAsyncKeyState(2) <> 0 Then Me.Caption = "Нажата левая кнопка"
If GetAsyncKeyState(1) <> 0 Then Me.Caption = "Нажата правая кнопка"
End If
Sleep 2
DoEvents
Loop
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.Caption = ""
End Sub

[/code]

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

Сообщение tyomitch » 19.11.2004 (Пт) 13:05

Не устаю напоминать, что (например, на сильно загруженной машине) получаемое значение GetAsyncKeyState будет уже не то, что на момент нажатия...
Изображение

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 19.11.2004 (Пт) 20:55

2 tyomitch: Прально.... Ну терь ваще не будем ответов давать на вопросы. И будем писать проги чётко на ассеблере, чтоб уж если затормозит, то я не виноват, да ? :wink:

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

Сообщение tyomitch » 19.11.2004 (Пт) 22:30

ALX_2002, ты зря возмущаешься - Ennor дал совершенно правильный ответ.
Или может, вообще не обращать внимание на ошибки в программах - ну, работает через раз, и ладно?
Изображение

HugoFlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 39
Зарегистрирован: 22.10.2004 (Пт) 21:31
Откуда: от верблюда

Сообщение HugoFlex » 20.11.2004 (Сб) 5:32

Есть такой параметр Button. :!:

Если прописать это в событии MouseDown()
If button=3 then ....
то таким образом можно проверит не нажата ли правая и левая кнопка :wink:
Читай не затем, чтобы противоречить и опровергать, не затем, чтобы принимать на веру и не затем, чтобы найти предмет для беседы, но чтобы мыслить, рассуждать и мечтать.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 20.11.2004 (Сб) 12:07

А нету в вб такого понятие, как нажатие на левую и правую кноки одновременно, vbLeftButton - есть, vbRightButton - тоже есть, даже vbMiddleButton есть, а вот vbLeftAndRightButton нет, так что твой совет с цифрой 3 (я так понимаю, сложение vbLeftButton и vbRightButton) не имеет никакого смысла :lol:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 20.11.2004 (Сб) 16:03

2 tyomitch: Отец. Я не возмущаюсь не в коем случае !! :roll: Я спокоен как танк. Я лишь говорю о том, что многоуважемый мною Ennor дал совет, а я дал пример. Я учёл возможность, что человеку нужен резьутат сегодня и сейчас, а не совет, над которым надо думать.

P.S That's all, what I wanted to say.

С уважением ALX_2002 :wink:

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.11.2004 (Сб) 17:30

xolod писал(а):А нету в вб такого понятие, как нажатие на левую и правую кноки одновременно, vbLeftButton - есть, vbRightButton - тоже есть, даже vbMiddleButton есть, а вот vbLeftAndRightButton нет, так что твой совет с цифрой 3 (я так понимаю, сложение vbLeftButton и vbRightButton) не имеет никакого смысла :lol:

У триггера есть только два положения: включено/выключено.
То же самое с кнопками мыши. Как ты представляешь себе значение сигнала, что нажаты обе кнопки одновременно?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 20.11.2004 (Сб) 21:00

Ruslan Demidow писал(а):
xolod писал(а):А нету в вб такого понятие, как нажатие на левую и правую кноки одновременно, vbLeftButton - есть, vbRightButton - тоже есть, даже vbMiddleButton есть, а вот vbLeftAndRightButton нет, так что твой совет с цифрой 3 (я так понимаю, сложение vbLeftButton и vbRightButton) не имеет никакого смысла :lol:

У триггера есть только два положения: включено/выключено.
То же самое с кнопками мыши. Как ты представляешь себе значение сигнала, что нажаты обе кнопки одновременно?

Интересно, а как же это делает DirectX? Все возможно! Просто надо думать..... :roll:

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

Сообщение Amed » 20.11.2004 (Сб) 21:04

DirectX? А что DirectX делает? Прошу поподробнее...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.11.2004 (Вс) 1:45

Ну ломает меня примеры писать, ломает! Нате, получайте...
Кинь это в код формы, а на саму форму кинь ListBox
Код: Выделить всё
Option Explicit
' /////////////////////////////////////////////////////////////////////////////
Private PressedButtons As Integer
' /////////////////////////////////////////////////////////////////////////////
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
PressedButtons = PressedButtons + Button
If PressedButtons < 0 Then PressedButtons = 0
Call Check_Buttons
End Sub
' /////////////////////////////////////////////////////////////////////////////
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
PressedButtons = PressedButtons - Button
If PressedButtons < 0 Then PressedButtons = 0
Call Check_Buttons
End Sub
' /////////////////////////////////////////////////////////////////////////////
Private Sub Check_Buttons()
Dim Z As Long
Me.List1.Clear
For Z = 0 To 15
  If (PressedButtons And (2 ^ Z)) > 0 Then Me.List1.AddItem "Button " & Z + 1
Next Z
End Sub

Предупреждаю сразу - у меня глючило при дабл-кликах колесом, поэтому поставил проверку на отрицательное значение. И еще: Басик не видит доп. кнопки просто в упор. Видимо, бу дезигн...

HugoFlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 39
Зарегистрирован: 22.10.2004 (Пт) 21:31
Откуда: от верблюда

Сообщение HugoFlex » 21.11.2004 (Вс) 5:57

xolod писал(а):А нету в вб такого понятие, как нажатие на левую и правую кноки одновременно, vbLeftButton - есть, vbRightButton - тоже есть, даже vbMiddleButton есть, а вот vbLeftAndRightButton нет, так что твой совет с цифрой 3 (я так понимаю, сложение vbLeftButton и vbRightButton) не имеет никакого смысла :lol:


А именно там есть такая константа vbLeftButton+vbRightButton. Я это даже прочел в руководстве по Visual Basic 6.0.
Читай не затем, чтобы противоречить и опровергать, не затем, чтобы принимать на веру и не затем, чтобы найти предмет для беседы, но чтобы мыслить, рассуждать и мечтать.


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

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

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

    TopList