AGB  ·  Datenschutz  ·  Impressum  







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

TPageControl - > Tabs per Maus durchsrollen?

Ein Thema von NoGAD · begonnen am 6. Mai 2022 · letzter Beitrag vom 8. Mai 2022
Antwort Antwort
Benutzerbild von NoGAD
NoGAD

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

TPageControl - > Tabs per Maus durchsrollen?

  Alt 6. Mai 2022, 19:02
Hallo,

TPageControl hat kein OnMouseWheel. Ich hatte mir das vor einem Jahr schon programmiert, nur leider den Quellcode verloren, es ging mit dem Standardcontrol.

Aber ich habe vergessen, wie ich das gemacht hatte.

Weiß jemand bitte, wie ich, wenn ich mit der Maus über den Tabs stehe, den PageIndex beim Scrollen mit dem Mausrad ändern kann?

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

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TPageControl - > Tabs per Maus durchsrollen?

  Alt 7. Mai 2022, 10:12
Per interceptor class, die cm_MouseWheel abfängt:

Delphi-Quellcode:
  type
  TPageControl = class(Vcl.ComCtrls.TPageControl)
  private
    procedure cmMouseWheel(var Message: TCMMouseWheel); Message cm_MouseWheel;
  end;

implementation

{ TPageControl }

procedure TPageControl.cmMouseWheel(var Message: TCMMouseWheel);
var
  Dir: integer;
begin
  if Message.WheelDelta < 0 then
    Dir := 1
  else
    Dir := -1;
  if (Dir = -1) and (ActivePageIndex = 0) then
    ActivePageIndex := PageCount - 1
  else
    ActivePageIndex := (ActivePageIndex + Dir) mod PageCount;
  Message.Result:=1;
end;
Renate
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: TPageControl - > Tabs per Maus durchsrollen?

  Alt 7. Mai 2022, 21:21
Hallo liebe Renate,


vielen Dank für den Code. In meiner Erinnerung habe ich das etwas anders im Kopf, da ich explizit entscheiden konnte, ob sich denn die Maus über den Tabs befindet.

Mit deinem aktuellen Code wird das Ereignis komplett abgefangen, eine Scrollbox innerhalb des PageControls z.B. funktioniert dann nicht mehr. Daher habe ich es etwas angepasst.

Mit dem folgenden Code wird vorher noch geprüft, ob der Mauszeiger sich auf einem Tab befindet. (eigentlich auf dem TPageControl direkt)


Delphi-Quellcode:
procedure TPageControl.cmMouseWheel(var Msg: TCMMouseWheel);
var
  Dummy_Direction: Integer;
  Dummy_Window: HWND;
  Dummy_WinControl: TWinControl;
begin

  Dummy_Window := WindowFromPoint(Msg.Pos);
  if Dummy_Window <> 0 then
  begin
    Dummy_WinControl := FindControl(Dummy_Window);
    if Dummy_WinControl <> nil then
    begin
      if Dummy_WinControl is TPageControl then
      begin
        if Msg.WheelDelta < 0 then
          Dummy_Direction := 1
        else
          Dummy_Direction := -1;
        if (Dummy_Direction = -1) and (ActivePageIndex = 0) then
          ActivePageIndex := PageCount - 1
        else
          ActivePageIndex := (ActivePageIndex + Dummy_Direction) mod PageCount;
        Msg.Result := 1;
      end;
    end;
  end;
end;
Ich hoffe, das ist so in Ordung.


LG und ein schönes Wochenende!
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TPageControl - > Tabs per Maus durchsrollen?

  Alt 8. Mai 2022, 00:09
Ich würde es etwas anders lösen (war zu faul meine Var-Namen zu ändern ):

Delphi-Quellcode:
procedure TPageControl.cmMouseWheel(var Message: TCMMouseWheel);
var
  Dir: Integer;
  P: TPoint;
begin
  P:=ScreenToClient(Message.Pos);
  if IndexOfTabAt(P.X, P.Y) < 0 then
    exit;
  if Message.WheelDelta < 0 then
    Dir := 1
  else
    Dir := -1;
  if (Dir = -1) and (ActivePageIndex = 0) then
    ActivePageIndex := PageCount - 1
  else
    ActivePageIndex := (ActivePageIndex + Dir) mod PageCount;
  Message.Result := 1;
end;
Gruß, und auch Dir schönes Wochenende

Renate
Renate
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: TPageControl - > Tabs per Maus durchsrollen?

  Alt 8. Mai 2022, 02:00
Hallo Renate,

danke für diesen schönen Beitrag. Es ist sehr übersichtlich, jedoch hat meine Methode (was ich nicht erwähnt hatte) auch den Zweck, bei Bedarf zwischen bestimmten PageControls zu unterscheiden. Somit kann ich z.B. über den Namen filtern, ob das Event erlaubt werden darf.

LG
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 02:15 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