Einzelnen Beitrag anzeigen

Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TCategoryPanelGroup, MouseWheel, Scroll?

  Alt 19. Jan 2022, 15:33
Hallo, dieser Beitrag ist zwar schon sehr alt, nur als generische Lösung habe ich noch eine Änderung.


Statt das Ereignis in der Form auszuwerten und für jedes TCategoryPanelGroup einzeln anzusteuern, kann die Prüfung auch im Ereignis der Komponente selbst erfolgen. Wichtig ist, dass das Form-Ereignis trotzdem Priorität gegenüber diesem hier hat.

Delphi-Quellcode:
procedure TForm1.CategoryPanelGroup1MouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
var
  i: Integer;
  DummyComponent: TComponent;
begin
  DummyComponent := Sender as TComponent;
  if DummyComponent is TCategoryPanelGroup then
  begin
    Handled := PtInRect((DummyComponent as TCategoryPanelGroup).ClientRect,
      (DummyComponent as TCategoryPanelGroup).ScreenToClient(MousePos));
    if Handled then
    begin
      for i := 1 to Mouse.WheelScrollLines do
        try
          if WheelDelta > 0 then
            (DummyComponent as TCategoryPanelGroup)
              .Perform(WM_VSCROLL, SB_LINEUP, 0)
          else
            (DummyComponent as TCategoryPanelGroup)
              .Perform(WM_VSCROLL, SB_LINEDOWN, 0);
        finally
          (DummyComponent as TCategoryPanelGroup).Perform(WM_VSCROLL,
            SB_ENDSCROLL, 0);
        end;
    end;
  end;
end;
Hierbei könnte m.M.n sogar die Prüfung des Mauszeigers weggelassen werden, da es sich ja um das gewünschte Objekt handelt ( if DummyComponent is TCategoryPanelGroup then )
Delphi-Quellcode:
    Handled := PtInRect((DummyComponent as TCategoryPanelGroup).ClientRect,
      (DummyComponent as TCategoryPanelGroup).ScreenToClient(MousePos));

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat