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;