unit MyDBGrid;interfaceuses
  Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids, ADODB;type
  TMyDBGrid = class(TDBGrid)
  private
    { Private declarations }
  protected
    { Protected declarations }
    procedure TitleClick(Column: TColumn); override;    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  public
    { Public declarations }
  published
    { Published declarations }
  end;procedure Register;implementationprocedure Register;
begin
  RegisterComponents('Samples', [TMyDBGrid]);
end;
procedure TMyDBGrid.TitleClick(Column: TColumn);
begin
    inherited;    if not assigned(DataSource) then
        exit;
    if not Assigned(DataSource.DataSet) then
        exit;
    if not (DataSource.DataSet is TADOQuery) then
        exit;
    if not DataSource.DataSet.Active then
        exit;    if (DataSource.DataSet as TADOQuery).Sort = '' then
        try
            (DataSource.DataSet as TADOQuery).Sort := column.FieldName + ' ASC'
        except
        end
    else begin
        try
            if (DataSource.DataSet as TADOQuery).Sort = column.FieldName + ' ASC' then
                (DataSource.DataSet as TADOQuery).Sort := column.FieldName + ' DESC'
            else (DataSource.DataSet as TADOQuery).Sort := column.FieldName + ' ASC';
        except
        end;
    end;
end;function TMyDBGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
    if not assigned(DataSource) then
        exit;
    if not Assigned(DataSource.DataSet) then
        exit;
    if not (DataSource.DataSet is TADOQuery) then
        exit;
    if not DataSource.DataSet.Active then
        exit;
    if DataSource.DataSet.IsEmpty then
        exit;    //DataSource.DataSet.MoveBy(3);
    DataSource.DataSet.Next;
end;function TMyDBGrid.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
    if not assigned(DataSource) then
        exit;
    if not Assigned(DataSource.DataSet) then
        exit;
    if not (DataSource.DataSet is TADOQuery) then
        exit;
    if not DataSource.DataSet.Active then
        exit;
    if DataSource.DataSet.IsEmpty then
        exit;    //DataSource.DataSet.MoveBy(-3);
    DataSource.DataSet.Prior;
end;end.