Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как определить, нажата ли правая кнопка мыши?


Автор: Нитонисе 4.2.2012, 18:27
Двигаю мышью по компоненту TImage. В событии OnMouseMove этого компонента нужно выполнять определенные действия, но только если мышь перемещается с нажатой ПКМ. Как это отследить?

Автор: Dem_max 5.2.2012, 09:48
OnMouseDown

Код

void __fastcall TMain::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if(Button == mbLeft)
  {
    // Нажата левая кнопка мыши
  }

     if(Button == mbRight)
  {
    // Нажата правая кнопка мыши
  }
}

Автор: Нитонисе 5.2.2012, 11:25
И каким образом мне поможет событие OnMouseDown, если мне нужно OnMouseMove?

Автор: 586 5.2.2012, 11:37
Заведи переменную.
В OnMouseDown, если нажата правая кнопка, устанавливай переменную в true.
В OnMouseUp, если нажата правая кнопка, устанавливай переменную в false.
А в OnMouseMove обращайся к этой переменной.

Добавлено @ 11:41
Вот так ещё можно:
Код
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if(Shift.Contains(ssRight))
    {
        Beep(255,50);
    }
}

Автор: Dem_max 5.2.2012, 11:37
Цитата

но только если мышь перемещается с нажатой ПКМ. Как это отследить?

тогда расшифруй что ты написал тут, какие то непонятные сокращения

Автор: Dem_max 5.2.2012, 12:19
еще можно так
Код

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if(Shift.Contains(ssRight)) ............................
}

Автор: 586 5.2.2012, 12:55
Я это и имел ввиду.

Автор: Нитонисе 5.2.2012, 14:59
Цитата(586 @  5.2.2012,  11:37 Найти цитируемый пост)
Заведи переменную.В OnMouseDown, если нажата правая кнопка, устанавливай переменную в true.В OnMouseUp, если нажата правая кнопка, устанавливай переменную в false.А в OnMouseMove обращайся к этой переменной.

Интересный и понятный вариант. Спасибо.


Цитата(586 @  5.2.2012,  11:37 Найти цитируемый пост)
Вот так ещё можно:

А вот по поводу Shift.Contains(ssRight) - думал это относится к контролю нажатости кнопки Shift, разве нет? И чем тогда отличаются TMouseButton и TShiftState?

Автор: 586 5.2.2012, 19:14
Цитата(Нитонисе @  5.2.2012,  15:59 Найти цитируемый пост)
А вот по поводу Shift.Contains(ssRight) - думал это относится к контролю нажатости кнопки Shift, разве нет? И чем тогда отличаются TMouseButton и TShiftState? 

В том, что параметр Shift показывает состояние сразу трёх кнопок мыши, с помощью него можно определить нажатие нескольких кнопок мыши сразу. А чтобы определить, нажатие какой кнопки привело к возникновению события OnMouseDown, используется параметр Button.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)