Utilizando a roda de rolagem do mouse em um DBGrid

 

A roda de rolagem se comporta de forma estranha com DBGrids. Esse código corrige esse comportamento. Apenas coloque um ApplicationEvent (Additional) em um formulário e implemente o evento OnMessage da seguinte forma:

 

procedure TForm1.ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean);

var

  i: SmallInt;

begin

  if Msg.message = WM_MOUSEWHEEL then

  begin

    Msg.message := WM_KEYDOWN;

    Msg.lParam := 0;

    i := HiWord(Msg.wParam) ;

    if i > 0 then

      Msg.wParam := VK_UP

    else

      Msg.wParam := VK_DOWN;

    Handled := False;

   end;

end;

 

Nota: Isso corrige o comportamento da roda de rolagem não apenas para DBGrids, mas para todos os outros componentes de lista (ListBox, ListView, etc).