mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-17 08:00:39 +01:00
LCL, grids, don't scroll beyond max position, in trunk it only moves scrollbar but grid is without effect, in 1.2.6 this fixes index out of range while scrolling as reported in issue #25862
git-svn-id: trunk@46565 -
This commit is contained in:
parent
f4500475db
commit
9271bbf67f
@ -4280,7 +4280,7 @@ end;
|
|||||||
|
|
||||||
procedure TCustomGrid.WMHScroll(var message: TLMHScroll);
|
procedure TCustomGrid.WMHScroll(var message: TLMHScroll);
|
||||||
var
|
var
|
||||||
C,TL,CTL,aPos: Integer;
|
C,TL,CTL,aPos, maxPos: Integer;
|
||||||
R: TRect;
|
R: TRect;
|
||||||
ScrollInfo: TScrollInfo;
|
ScrollInfo: TScrollInfo;
|
||||||
aCode: Smallint;
|
aCode: Smallint;
|
||||||
@ -4315,11 +4315,13 @@ begin
|
|||||||
if not FGCache.ValidGrid or not HandleAllocated then
|
if not FGCache.ValidGrid or not HandleAllocated then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
|
ScrollInfo.cbSize := SizeOf(ScrollInfo);
|
||||||
|
ScrollInfo.fMask := SIF_PAGE or SIF_RANGE;
|
||||||
|
GetScrollInfo(Handle, SB_HORZ, ScrollInfo);
|
||||||
|
maxPos := ScrollInfo.nMax - Max(ScrollInfo.nPage-1, 0);
|
||||||
|
|
||||||
aCode := message.ScrollCode;
|
aCode := message.ScrollCode;
|
||||||
if UseRightToLeftAlignment then begin
|
if UseRightToLeftAlignment then begin
|
||||||
ScrollInfo.cbSize:=SizeOf(ScrollInfo);
|
|
||||||
ScrollInfo.fMask:= SIF_PAGE or SIF_RANGE;
|
|
||||||
GetScrollInfo(Handle, SB_HORZ, ScrollInfo);
|
|
||||||
aPos := (ScrollInfo.nMax-ScrollInfo.nPage)-Message.Pos;
|
aPos := (ScrollInfo.nMax-ScrollInfo.nPage)-Message.Pos;
|
||||||
case aCode of
|
case aCode of
|
||||||
SB_LINERIGHT: aCode := SB_LINELEFT;
|
SB_LINERIGHT: aCode := SB_LINELEFT;
|
||||||
@ -4350,7 +4352,7 @@ begin
|
|||||||
SB_LINERIGHT: C := CTL + NextColWidth( FTopLeft.X, 1);
|
SB_LINERIGHT: C := CTL + NextColWidth( FTopLeft.X, 1);
|
||||||
SB_LINELEFT: C := CTL - NextColWidth( FTopLeft.X - 1, -1);
|
SB_LINELEFT: C := CTL - NextColWidth( FTopLeft.X - 1, -1);
|
||||||
// Scrolls one page of lines up / down
|
// Scrolls one page of lines up / down
|
||||||
SB_PAGERIGHT: C := CTL + AccumColWidths(FGCache.FullVisibleGrid.Left, FGCache.FullVisibleGrid.Right);
|
SB_PAGERIGHT: C := min(maxPos, CTL + AccumColWidths(FGCache.FullVisibleGrid.Left, FGCache.FullVisibleGrid.Right));
|
||||||
SB_PAGELEFT: C := CTL - AccumColWidths(FGCache.FullVisibleGrid.Left, FGCache.FullVisibleGrid.Right);
|
SB_PAGELEFT: C := CTL - AccumColWidths(FGCache.FullVisibleGrid.Left, FGCache.FullVisibleGrid.Right);
|
||||||
// Scrolls to the current scroll bar position
|
// Scrolls to the current scroll bar position
|
||||||
SB_THUMBPOSITION:
|
SB_THUMBPOSITION:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user