ручка настройки двойного щелчка мыши
Пользователь настраивает свою мышь так, чтобы он мог выполнить двойной щелчок с помощью колесика мыши или специальной кнопки 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 , полученное конкретным окном.