Okay, so some more tests.
When I use the combination of GetScrollPos and GetScrollRange (from LCLIntf), the min and max values of the range get at least reported correctly. Now I tried to scroll both a grid and a memo to see if there are any differences.
Now, on both gtk2 and win32, when I use SetScrollPos, the scrollbar moves correctly as mentioned before, but for both components (grid and memo), it doesn't move the content.
On qt5 however, in the case of the memo it works as expected, moving both the scrollbar and the content. Here the grid however doesn't work, updating the scroll bar only once (but not the content).
I attached an example project. Not sure if I should open another report?