TScrollbox mit Mausrad steuern

Hat man in einem Formular mehr Komponenten zu platzieren, als darin Platz haben, bietet es sich an, eine Scrollbox zu verwenden um innerhalb der Form scrollen zu können.

Verwendet man eine TScrollbox, so zeigt diese zwar eine Scroll-Leiste an wenn die in Ihr platzierten Komponenten über die Formulargröße hinausgehen. Allerdings kann nicht mit dem Mausrad gescrollt werden. Hier zeige ich euch wie man dieses Feature implementieren kann:

Man muß im OnMouseWheel-Event der Form (hier Form1) folgenden Code platzieren:

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  I: Integer;
begin
  Handled := PtInRect(ScrollBox1.ClientRect, ScrollBox1.ScreenToClient(MousePos));
  if Handled then
    for I := 1 to Mouse.WheelScrollLines do
    try
      if WheelDelta > 0 then
        ScrollBox1.Perform(WM_VSCROLL, SB_LINEUP, 0)
      else
        ScrollBox1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
    finally
      ScrollBox1.Perform(WM_VSCROLL, SB_ENDSCROLL, 0);
    end;
end;

Mit diesem Event wird laufend auf das Mausrad reagiert. Wenn sich der Mauszeiger über der Scrollbox befindet, wird diese entsprechend rauf- oder runtergescrollt.