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).