Hier mal ein logischer Anfang - alle Fälle und Eventualitäten müsstest Du aber selbst erarbeiten, dazu fehlt mir gerade die Zeit.
Delphi-Quellcode:
procedure TForm3.grd1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
if grd1.Selection.Top < grd1.TopRow then
grd1.Selection := TGridRect(Rect(grd1.Selection.Left, grd1.TopRow, grd1.Selection.Left, grd1.TopRow));;
end;
...
...