Jeg har på adressen 
http://www.swissdelphicenter.ch/torry/showcode.php?id=2035 fundet nedenstående løsning, som ser ud til at fungere fortræffelig.
Jeg har dog været nødt til at ændre linjen Table1.RecNo := Pos;
til 
if Pos>0 then
  Table1.RecNo := Pos;
Når man slipper musen efter en scroll, sættes Pos til 0 og det udløser en exception.
//...
private
  OldGridProc: TWndMethod;
  procedure GridWindowProc(var Message: TMessage);
//...
procedure TForm1.FormCreate(Sender: TObject);
begin
  OldGridProc        := DBGrid1.WindowProc;
  DBGrid1.WindowProc := GridWindowProc;
end;
procedure TForm1.GridWindowProc(var Message: TMessage);
var
  Pos: SmallInt;
begin
  OldGridProc(Message);
  if Message.Msg = WM_VSCROLL then  //or WM_HSCROLL
  begin
    Pos          := Message.WParamHi;  //Scrollbox position
    Table1.RecNo := Pos;
  end;
end;