In the components derived from TCustomGrid, if goRowMoving is enabled, the "held" row can be moved up only to the top displayed row. It can be moved down below the displayed grid, though, which might end up with rather confusing results.
I am attaching a modified doRowMoving as in grid.pas, providing autoscrolling for cases when cursor moves outside the displayed grid. As I am a novice in object Pascal/Lazarus, it is kind of a mess, but works for me. Please review and fix.
Jan Waclawek