LCL TControlScrollbar.Range: range should be position limit + page size, fixes scrolling behind max

git-svn-id: trunk@17250 -
This commit is contained in:
tombo 2008-11-06 14:04:24 +00:00
parent 9584f3723f
commit 5a1665f97c

View File

@ -24,7 +24,7 @@ const
procedure TControlScrollBar.SetPosition(const Value: Integer); procedure TControlScrollBar.SetPosition(const Value: Integer);
var var
OldPosition: Integer; OldPosition, MaxPos: Integer;
ScrollInfo: TScrollInfo; ScrollInfo: TScrollInfo;
begin begin
if Value < 0 then if Value < 0 then
@ -49,13 +49,14 @@ begin
end; end;
end; end;
if Value > Range then MaxPos := Range - Page;
if (MaxPos >= 0) and (Value > MaxPos) then
begin begin
{$IFDEF VerboseScrollingWinControl} {$IFDEF VerboseScrollingWinControl}
if DebugCondition then if DebugCondition then
DebugLn(['TControlScrollBar.SetPosition Range Value=',Value,' > Range=',Range]); DebugLn(['TControlScrollBar.SetPosition Range Value=',Value,' > Range=',Range]);
{$ENDIF} {$ENDIF}
SetPosition(Range); SetPosition(MaxPos);
exit; exit;
end; end;
@ -137,7 +138,7 @@ begin
ScrollInfo.fMask := SIF_Range + SIF_Page; ScrollInfo.fMask := SIF_Range + SIF_Page;
GetScrollInfo(ControlHandle, IntfBarKind[Kind], ScrollInfo); GetScrollInfo(ControlHandle, IntfBarKind[Kind], ScrollInfo);
InvalidateScrollInfo; InvalidateScrollInfo;
FRange := ScrollInfo.nMax - ScrollInfo.nMin - integer(ScrollInfo.nPage); FRange := ScrollInfo.nMax - ScrollInfo.nMin;
end; end;
Result := FRange; Result := FRange;
end; end;