Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mit dem Mausrad in einer Scrollbox scrollen (https://www.delphipraxis.net/201315-mit-dem-mausrad-einer-scrollbox-scrollen.html)

delphicoder123 11. Jul 2019 12:42

Mit dem Mausrad in einer Scrollbox scrollen
 
Hallo,
wenn ich in einer Scrollbox mit dem Mausrad scrolle, dann soll die Scrollbar nach unten bzw. oben scrollen.
Warum bewegt sich die Scrollbar kein Millimeter?

Hier der Code:


Delphi-Quellcode:
procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position + 20;
end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position - 20;
end;

HolgerX 11. Jul 2019 13:15

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Hmm..

Verkehrtes Event...

'OnMouseWheel' ist fürs scrollen zuständig...

OnWheelDown entspricht dem MouseDown, nur halt für Weel...

delphicoder123 11. Jul 2019 13:28

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Zitat:

Zitat von HolgerX (Beitrag 1436508)
Hmm..

Verkehrtes Event...

'OnMouseWheel' ist fürs scrollen zuständig...

OnWheelDown entspricht dem MouseDown, nur halt für Weel...

Warum falsches Event?
Ich muss doch wissen, ob man mit der Maus nach oben oder unten scrollt?

Rolf Frei 11. Jul 2019 13:42

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Wie HolgerX schon geschrieben hat, sind das die Events für den Mausrad-Tatendruck nicht die Bewegung des Rades. OnMouseWheel ist das was du brauchst. Der Paramter WheelDelta in diesem Event gibt dir an wieviel du scrollen musst. Der Wert ist positiv oder negativ je nach Richtung.

EWeiss 11. Jul 2019 13:43

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Nun ja das steht im HiWord von WPARAM..
Wenn WM_MOUSEWHEEL bedient wird.

Dafür nimmt aber nicht UP\Down sondern wie Holger schon sagte OnMouseWheel..
Zitat:

Der Paramter WheelDelta in diesem Event gibt dir an wieviel du scrollen musst.
Nein kannst..
Das ist abhängig davon was du in den Systemeinstellungen angegeben hast.

Das hier hat also keinen Effekt weil hier die Systemeinstellungen übernommen werden. Bei mir wären das dann 3 und nicht 20, erzwingen kannst du das nicht.
Delphi-Quellcode:
ScrollBox1.VertScrollBar.Position + 20;

Quatsch.. sorry.
Ist die Richtung in der gescrollt wird.


gruss

delphicoder123 11. Jul 2019 14:14

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Das richtige Ereignis zu nehmen hat auch nicht geholfen.
Genau das gleiche Verhalten, wie vorher.

Delphi-Quellcode:
procedure TForm1.ScrollBox2MouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
begin
  ScrollBox2.VertScrollBar.Position := ScrollBox2.VertScrollBar.Position + WheelDelta;
end;

EWeiss 11. Jul 2019 14:33

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Hier im Forum suchenWheelDelta

gruss

Rolf Frei 11. Jul 2019 14:48

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
WheelDelta kann er nutzen um entsprechend zu scrollen. Der Wert ist übrigens immer 120/-120. Das ist im MSDN auch so beschrieben. Ein schneller Test hat das bei mir bestätigt. Wenn ich die Mauseinstellungen ändere, hat das keine Wirkung auf diesen Wert.

Dieser Wert kann aber in der Berechnung der Pixel benutzt werden. Sein Event könnte dann etwas so aussehen:

Delphi-Quellcode:
procedure TForm1.ScrollBox1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
begin
  ScrollBox1.VertScrollBar.Position :=
    ScrollBox1.VertScrollBar.Position - (WheelDelta * Mouse.WheelScrollLines div 10);
end;
Der Wert 10 im Beispiel kann entsprechend angepasst werden um die gewünschte Defaultgeschwindigkeit zu bestimmen. Wie grösser dieser Wert ist, umso kleiner ist der Scrollbereich mit einer Mausraddrehung. Mouse.WheelScrollLines ist der Wert aus den Mauseinstellungen.

Rolf Frei 11. Jul 2019 14:53

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Zitat:

Zitat von delphicoder123 (Beitrag 1436517)
Das richtige Ereignis zu nehmen hat auch nicht geholfen.
Genau das gleiche Verhalten, wie vorher.

Delphi-Quellcode:
procedure TForm1.ScrollBox2MouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
begin
  ScrollBox2.VertScrollBar.Position := ScrollBox2.VertScrollBar.Position + WheelDelta;
end;

Du musst bei ScrollBox2.VertScrollBar.Range einen Wert drin haben der grösser als die Höhe deiner Scrollbox ist, ansonsten kann er ja auch nichts scrollen. Der Range gibt dir an wie hoch der Scrollbereich sein soll. Setze den mal 4000 und dann klappt das auch mit dem Scrollen. Verwende mein Beispiel vom letzten Post. Das passt die Geschwindigkeit an die Einstellung der Maus an.

EWeiss 11. Jul 2019 14:55

AW: Mit dem Mausrad in einer Scrollbox scrollen
 
Delphi-Quellcode:
 (WheelDelta * Mouse.WheelScrollLines div 10);

yep.. wäre eine Möglichkeit :thumb:
Zitat:

WheelDelta kann er nutzen um entsprechend zu scrollen. Der Wert ist übrigens immer 120/-120.
Nun bei mir 1 oder -1 es zeigt die Richtung an in der gescrollt wird.
Aber gut letztendlich egal.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz