“Wheel mouse” é o nome em inglês desses mouses com uma “rodinha” na parte superior, para os quais ainda não existe (pelo menos que eu saiba) nome em português – exceto, é claro, “mouse de rodinha”, mas isto não é termo técnico que se apresente.

A rotina abaixo mostra como utilizar o botão wheel para correr registros de uma DBGrid. Como a DBGrid do Delphi não dá suporte a este recurso existe uma forma de capturar as mensagem do windows e fazer na unha mesmo.

Neste exemplo utilizei o Delphi7 e não testei com versões posteriores (D2005,D2006,D2007), talvez este recurso já tenha sido incorporado nestas versões, mas não posso confirmar neste momento.


{ Código Fonte do Exemplo }
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Buttons, Grids, Provider, DBClient, DB,  FMTBcd, ExtCtrls,
  SqlExpr, StdCtrls, ComCtrls,  DBCtrls,DBGrids;

type

  TForm1 = class(TForm)
    DBGrid1:TDBGrid;
    ...
    ...
    ...
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure WheelDBGrid(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation
{$R *.DFM}

type
   PegaEvento = class(TControl);

procedure Tform1.FormCreate(Sender: TObject);
begin
  DBGrid1.WindowProc := WheelDBGrid;
end;

procedure TForm1.WheelDBGrid(var Message: TMessage);
var
  vQuanto : short;
begin
  if (Message.Msg = WM_MOUSEWHEEL) then
  begin

    vQuanto := HiWord(Message.WParam);
    vQuanto := vQuanto div 120;
    DBGrid1.DataSource.DataSet.MoveBy(-vQuanto)
  end
  else

     PegaEvento(DBGrid1).WndProc(Message);
end;

end.



Obrigado a todos e espero ter ajudado !!!