ручка настройки двойного щелчка мыши

Пользователь настраивает свою мышь так, чтобы он мог выполнить двойной щелчок с помощью колесика мыши или специальной кнопки Logitech. Он сообщает, что мое программное обеспечение распознает только стандартные двойные щелчки левой кнопкой мыши. Любые предложения относительно того, что я не могу предоставить? Как исправить?

программное обеспечение - Delphi Alexandria, VCL, Windows.

Этот потомок TDrawgrid ищет двойные щелчки, устанавливая OnDblClick в пользовательскую процедуру в Create:

      OnDblClick := DoDoubleClick;

procedure DoDoubleClick(Sender: TObject);



procedure TWS_Grid.DoDoubleClick(Sender: TObject);
begin
  if fGridState <> gsNormal then
    exit;
  if Assigned(On_DoubleClickCell) then
  begin
    On_DoubleClickCell(self, Col, Row);
    just_double_clicked := true;
  end;
end;

Этот On_DoubleClickcell хорошо работает с обычным двойным щелчком левой кнопки. Однако мой собственный CheckMouseDown, вызываемый OnMouseDown, не принимает никаких других кнопок, кроме mbLeft:

      procedure TWS_Grid.CheckMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: integer);
var
  ACol, AGridRow: integer;
begin
  if (Button <> mbLeft) or (not(fGridState in [gsNormal, gsSelecting])) then
    exit;
...

Нужно ли как-то считать клики в OnMouseDown или OnMouseUp?

Спасибо

1 ответ

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

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

Поэтому используйте комбинацию информации Button и Shift для обнаружения необходимого двойного щелчка.

      procedure TForm1.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssDouble in Shift then
  begin
    case Button of
      TMouseButton.mbLeft: MessageDlg('Left button double click', mtInformation, [mbOK],0);
      TMouseButton.mbRight: MessageDlg('Right button double click', mtInformation, [mbOK],0);
      TMouseButton.mbMiddle: MessageDlg('Mouse wheel double click', mtInformation, [mbOK],0);
    end;
  end;
end;

В качестве альтернативы вы также можете попробовать обнаружить двойной щелчок, обработав оконное сообщение WM_LBUTTONDBLCLK , полученное конкретным окном.

Другие вопросы по тегам