How to add OnMouseWheel
to the same form for two scrollboxes? I applied the method to ScrollBox1
but I did not know how to add the method to ScrollBox2
procedure TForm3.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
LTopLeft, LTopRight, LBottomLeft, LBottomRight: SmallInt;
LPoint: TPoint;
begin
inherited;
LPoint := ScrollBox1.ClientToScreen(Point(0,0));
LTopLeft := LPoint.X;
LTopRight := LTopLeft + ScrollBox1.Width;
LBottomLeft := LPoint.Y;
LBottomRight := LBottomLeft + ScrollBox1.Width;
if (MousePos.X >= LTopLeft) and
(MousePos.X <= LTopRight) and
(MousePos.Y >= LBottomLeft)and
(MousePos.Y <= LBottomRight) then
begin
ScrollBox1.VertScrollBar.Position :=
ScrollBox1.VertScrollBar.Position - WheelDelta;
Handled := True;
end;
end;
Assign the same event handler to both ScrollBox components, not to the Form. And then use the event's Sender
parameter to know which component is calling the handler:
procedure TForm3.ScrollBoxMouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
var
ScrollBox: TScrollBox;
R: TRect;
begin
ScrollBox := TScrollBox(Sender);
R := ScrollBox.ClientToScreen(ScrollBox.ClientRect);
if PtInRect(R, MousePos) then
begin
ScrollBox.VertScrollBar.Position := ScrollBox.VertScrollBar.Position - WheelDelta;
Handled := True;
end;
end;