This one scrolls 1 row at a time
Enjoy
Coffee Cup
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, DBTables;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
TWheelDBGrid = class(TDBGrid)
public
property OnMouseWheel;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
TWheelDBGrid(DBGrid1).OnMouseWheel := DBGridMouseWheel;
end;
function GetNumScrollLines: Integer;
begin
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @Result, 0);
end;
procedure TForm1.DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
Grid: TDBGrid;
begin
if WheelDelta = 0 then Exit;
Grid := TDBGrid(Sender);
if Assigned(Grid.DataSource) and Assigned(Grid.DataSource.DataSet) then
with Grid.DataSource.DataSet do
begin
if WheelDelta < 0 then
begin
if not Eof then
Next;
end
else
begin
if not Bof then
Prior;
end;
// 👇 Force the grid to scroll to current record
if Assigned(Grid.SelectedField) then
Grid.SelectedField := Grid.SelectedField;
end;
Handled := True;
end;
end.

