Adicionando Mouse Wheel no TScrollBox

 

Uma forma simples tratar Mouse Wheel no TScrollBox.

O código a seguir foi escrito pelo Peter Bellow no newsgroup
embarcadero.public.delphi.vcl.components.using
Eu postei aqui o código com uma pequena correção, o  SB_LINEDOWN/SB_LINEUP estavam invertidos, e outras modificações pra adaptar ao meu código.

procedure TFormEquifaxMain.ScrollBoxMouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var
  Handled: Boolean);
var
  Msg: Cardinal;
  Code: Cardinal;
  I, ScrollLines: Integer;
begin
  if WindowFromPoint(Mouse.Cursorpos) = ScrollBox.Handle then
  begin
    Handled := True;
    Msg:= IfThen(ssShift in Shift, WM_HSCROLL, WM_VSCROLL);
    Code:= IfThen(WheelDelta < 0, SB_LINEDOWN, SB_LINEUP);
    ScrollLines:= Mouse.WheelScrollLines * 5;
    for I:= 1 to ScrollLines do
      ScrollBox.Perform(Msg, Code, 0);
    ScrollBox.Perform(Msg, SB_ENDSCROLL, 0);
  end;
end;
 
 
 

1 Comments

 
  1. Daniel Grillo disse:

    Olá Cesar,

    Eu tenho vários componentes scrollbox no form, então eu alterei a sua dica para funcionar em qualquer um deles. Obrigado pela dica e segue o código:

    procedure TfrmMain.FormMouseWheel(Sender: TObject; Shift: TShiftState;
    WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    var
    Msg: Cardinal;
    Code: Cardinal;
    I, ScrollLines: Integer;
    WinCtrl: TWinControl;
    begin
    WinCtrl := FindVCLWindow(Mouse.CursorPos);

    while (WinCtrl nil) and not (WinCtrl is TScrollBox) do
    begin
    WinCtrl := WinCtrl.Parent;
    end;

    if WindowFromPoint(Mouse.Cursorpos) = WinCtrl.Handle then
    begin
    Handled := True;
    Msg := IfThen(ssShift in Shift, WM_HSCROLL, WM_VSCROLL);
    Code := IfThen(WheelDelta < 0, SB_LINEDOWN, SB_LINEUP);
    ScrollLines := Mouse.WheelScrollLines * 5;

    for I:= 1 to ScrollLines do
    begin
    WinCtrl.Perform(Msg, Code, 0);
    end;

    WinCtrl.Perform(Msg, SB_ENDSCROLL, 0);
    end;
    end;

 

Leave a Comment

 

You must be logged in to post a comment.