From c25e153265d1077448e1ff5dcc993c8746c80ac1 Mon Sep 17 00:00:00 2001 From: michl Date: Sun, 2 May 2021 20:24:59 +0000 Subject: [PATCH] LCL: TScrollingWinControl.ScrollInView or TScrollBox.ScrollInView does not calculate stacked controls, second attempt. Issue #38838. git-svn-id: trunk@65083 - --- lcl/include/scrollingwincontrol.inc | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lcl/include/scrollingwincontrol.inc b/lcl/include/scrollingwincontrol.inc index cb7197dc44..65f185a1db 100644 --- a/lcl/include/scrollingwincontrol.inc +++ b/lcl/include/scrollingwincontrol.inc @@ -249,18 +249,15 @@ end; procedure TScrollingWinControl.ScrollInView(AControl: TControl); var LRect: TRect; - LParent: TWinControl; + LPoint: TPoint; begin if AControl = nil then Exit; - LRect := AControl.BoundsRect; - LParent := AControl.Parent; - while LParent <> Self do - begin - OffsetRect(LRect, LParent.BoundsRect.Left, LParent.BoundsRect.Top); - LParent := LParent.Parent; - if LParent = nil then Exit; //ScrollingWinControl isn't parent of AControl - end; - OffsetRect(LRect, -HorzScrollBar.Position, -VertScrollBar.Position); + LPoint := AControl.ClientToParent(Point(0, 0), Self); + LRect.Left := LPoint.x; + LRect.Top := LPoint.y; + LPoint := AControl.ClientToParent(Point(AControl.Width, AControl.Height), Self); + LRect.Right := LPoint.x; + LRect.Bottom := LPoint.y; if LRect.Left < 0 then HorzScrollBar.Position := HorzScrollBar.Position + LRect.Left else if LRect.Right > ClientWidth then