Как вручную получить TMouseButton в C ++ Builder - PullRequest
0 голосов
/ 08 сентября 2018

Я использую C ++ Builder от Embarcadero Technology. Встроенный обработчик события OnClick не определяет, является ли щелчок мыши левой или правой кнопкой. Есть ли функция, которую я могу вызвать, чтобы вручную заполнить значения для TMouseButton. Ниже находится обработчик события OnClick?

void __fastcall TForm::ListBox1Click(TObject *Sender)
{
  TMouseButton Button;

  Button = ???
}

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Как уже упоминалось, вы можете использовать событие OnMouseDown, чтобы запомнить текущее состояние кнопки мыши для использования в OnClick, например.

private:
    bool LButtonDown;
    bool RButtonDown;

...

void __fastcall TForm1::ListBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    switch (Button) {
        case mbLeft:
            LButtonDown = true;
            break;

        case mbRight:
            RButtonDown = true;
            break;
    }
}

void __fastcall TForm1::ListBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    switch (Button) {
        case mbLeft:
            LButtonDown = false;
            break;

        case mbRight:
            RButtonDown = false;
            break;
    }
}

void __fastcall TForm::ListBox1Click(TObject *Sender)
{
    if (LButtonDown) ...
    if (RButtonDown) ...
}

Если вы не хотите делать это, вы можете использовать Win32 API GetKeyState() или GetAsyncKeyState(), чтобы запросить текущее состояние левой и левой мыши. правые кнопки, используя коды виртуальных клавиш VK_LBUTTON и VK_RBUTTON, например:

void __fastcall TForm::ListBox1Click(TObject *Sender)
{
    if (GetKeyState(VK_LBUTTON)) ...
    if (GetKeyState(VK_RBUTTON)) ...
}
0 голосов
/ 08 сентября 2018

Правильное событие, которое нужно использовать для получения подробной информации о событиях щелчка мыши, - OnMouseDown (также OnMouseUp и OnMouseMove).

Переопределить событие, а затем реализовать событие MouseDown, как это

void __fastcall TMyListView::MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
{
     if (Button == mbLeft){

     }
     if (Button == mbRight){

     }
}

См. Также Vcl.Controls.TControl.OnMouseDown в документации Embarcadero.

...