用戶自定義他的滑鼠,以便他可以使用滑鼠滾輪或特殊的 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 適用于普通的左鍵雙擊。但是,我自己的由 onm ouseDown 呼叫的 CheckMouseDown 不接受除 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;
...
我是否需要以某種方式計算 onm ouseDown 或 onm ouseUp 中的點擊次數?
謝謝
uj5u.com熱心網友回復:
為了檢查 onm ouseDown 事件中的雙擊,您應該檢查所述事件回傳的Shift State 。
進行雙擊時(無論使用哪個按鈕執行雙擊),移位狀態將包括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視窗訊息來檢測雙擊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530426.html
