AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TCategoryPanelGroup, MouseWheel, Scroll?

Ein Thema von Codehunter · begonnen am 27. Feb 2017 · letzter Beitrag vom 19. Jan 2022
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

TCategoryPanelGroup, MouseWheel, Scroll?

  Alt 27. Feb 2017, 08:41
Moinsen!

Ja was soll ich sagen? Die Überschrift sagt eigentlich schon alles aus: Wie bekommt man ein TCategoryPanelGroup dazu, auf ein MouseWheel hin zu reagieren?

Grüße
Cody

EDIT: Ich habe jetzt mal einen Tip aus Stackoverflow adaptiert, scheint (vorerst) zu funktionieren:
Delphi-Quellcode:
procedure TForm5.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  I: Integer;
begin
  Handled := PtInRect(CategoryPanelGroup1.ClientRect, CategoryPanelGroup1.ScreenToClient(MousePos));
  if Handled then begin
    for I := 1 to Mouse.WheelScrollLines do
    try
      if WheelDelta > 0 then
        CategoryPanelGroup1.Perform(WM_VSCROLL, SB_LINEUP, 0)
      else
        CategoryPanelGroup1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
    finally
      CategoryPanelGroup1.Perform(WM_VSCROLL, SB_ENDSCROLL, 0);
    end;
  end;
end;
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (27. Feb 2017 um 09:16 Uhr)
  Mit Zitat antworten Zitat
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: TCategoryPanelGroup, MouseWheel, Scroll?

  Alt 19. Jan 2022, 16:25
Reicht es nicht das EndScroll einmal nach allen LineUp/LineDown zu machen?
(For in das Try-Finally)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: TCategoryPanelGroup, MouseWheel, Scroll?

  Alt 19. Jan 2022, 17:35
Du hast Recht. Das habe ich nicht beachtet, weil ich den vorherigen Code einfach abgeändert hatte.

Danke

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz