From a46d1d3f3c518b647849377feebdff0a053679d4 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sat, 23 Sep 2023 20:59:57 +0000 Subject: [PATCH] NiceGrid: Improved mousewheel behaviour. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8926 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/nicegrid/source/nicegrid.pas | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/components/nicegrid/source/nicegrid.pas b/components/nicegrid/source/nicegrid.pas index c34b46884..7ac27e833 100644 --- a/components/nicegrid/source/nicegrid.pas +++ b/components/nicegrid/source/nicegrid.pas @@ -284,7 +284,7 @@ type procedure WMUnknown(var Msg: TLMessage); message LM_USER + $B902; procedure WMVScroll(var Msg: TLMVScroll); message LM_VSCROLL; procedure WMHScroll(var Msg: TLMHScroll); message LM_HSCROLL; - procedure WMMouseWheel(var Msg: TLMessage{TWMMouseWheel}); message LM_MOUSEWHEEL; +// procedure WMMouseWheel(var Msg: TLMessage{TWMMouseWheel}); message LM_MOUSEWHEEL; procedure WMEraseBkgnd(var Msg: TLMEraseBkGnd); message LM_ERASEBKGND; // procedure WMSetFocus(var Msg: TLMSetFocus); message LM_SETFOCUS; // procedure WMKillFocus(var Msg: TLMKillFocus); message LM_KILLFOCUS; @@ -410,6 +410,7 @@ type procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; procedure DoEnter; override; procedure DoExit; override; + function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; procedure DoOnResize; override; {$ENDIF} @@ -3603,12 +3604,26 @@ begin Msg.Result := 0; end; -procedure TNiceGrid.WMMouseWheel(var Msg: {$IFDEF FPC}TLMessage{$ELSE}TWMMouseWheel{$ENDIF}); +{$IFDEF FPC} +function TNiceGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; + MousePos: TPoint): Boolean; +{$ELSE} +procedure TNiceGrid.WMMouseWheel(var Msg: TWMMouseWheel); +{$ENDIF} var Old: Integer; + delta: Integer; + sgn: Integer; begin + delta := {$IFNDEF FPC}Msg.{$ENDIF}WheelDelta; + sgn := Sign(delta); + if (ssShift in Shift) then + delta := sgn * FLargeChange + else + delta := sgn * FSmallChange; + Old := FVertOffset; - FVertOffset := Max(0, Min(FMaxVScroll, FVertOffset - Msg.{$IFDEF FPC}lParam{$ELSE}WheelDelta{$ENDIF})); + FVertOffset := Max(0, Min(FMaxVScroll, FVertOffset - delta)); if (FVertOffset <> Old) then begin SetScrollBar(SB_VERT, 0, FVertOffset, SIF_POS);