滚动框鼠标滚轮delphi

Alh*_*mam 3 delphi vcl

如何将OnMouseWheel两个滚动框添加到同一个表单?我应用了该方法,ScrollBox1但我不知道如何将该方法添加到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;
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 6

将相同的处理程序分配给两个 ScrollBox 组件,而不是 Form,然后使用参数Sender来了解哪个组件正在调用该处理程序。

procedure TForm3.ScrollBoxMouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
var
  LTopLeft, LTopRight, LBottomLeft, LBottomRight: SmallInt;
  LPoint: TPoint;
  ScrollBox: TScrollBox;
begin
  ScrollBox := TScrollBox(Sender);
  LPoint := ScrollBox.ClientToScreen(Point(0,0));
  LTopLeft := LPoint.X;
  LTopRight := LTopLeft + ScrollBox.ClientWidth;
  LBottomLeft := LPoint.Y;
  LBottomRight := LBottomLeft + ScrollBox.ClientWidth;
  if (MousePos.X >= LTopLeft) and
    (MousePos.X <= LTopRight) and
    (MousePos.Y >= LBottomLeft) and
    (MousePos.Y <= LBottomRight) then
  begin
    ScrollBox.VertScrollBar.Position := ScrollBox.VertScrollBar.Position - WheelDelta;
    Handled := True;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

  • @Alhmam `repeat` *再次阅读代码之前的文本* `直到理解;` 然后仔细看看局部变量 `ScrollBox: TScrollBox;` 是如何使用的。在这一行之后: `ScrollBox := TScrollBox(Sender);`,`ScrollBox` 指的是触发事件的实际滚动框(您的 `ScrollBox1` 或 `ScrollBox2`)。因此设置了正确滚动框的滚动条位置。这是一个典型示例,说明了原因以及如何避免在事件处理程序中直接引用触发控件。 (6认同)
  • 仅当 ScrollBox 中没有控件时,此代码才有效。如果有,那么一旦这些控件之一位于鼠标指针下方,用户将无法滚动。 (2认同)