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/)
-   -   TTrackBar großschrittig auslesen (https://www.delphipraxis.net/183532-ttrackbar-grossschrittig-auslesen.html)

TForm1 17. Jan 2015 18:35


TTrackBar großschrittig auslesen
 
Hallo,
gibt es eine Möglichkeit, eine TTrackBar so auszulesen, dass sie nur dann ein Ereignis wirft, wenn sie die ganzzahligen Positionen erreicht? OnChange ist mir zu kleinschrittig, da schon bei jeder kleinsten Mausbewegung das Event auslöst, sodass ich wenn ich den Zeiger um nur eine Einheit verschiebe, das Event bereits 20 mal aufgerufen wurde.
Gibt es so etwas oder muss ich mir da selbst was zusammenbasteln? Sowas wie
Delphi-Quellcode:
if alteposition <> neueposition then machwas
?

himitsu 17. Jan 2015 19:46

AW: TTrackBar großschrittig auslesen
 
Warum verkleinerst du nicht einfach den Wertebereich?

Max div 2 und schon sind es "größere" Schritte. :roll:

hathor 17. Jan 2015 20:45

AW: TTrackBar großschrittig auslesen
 
Delphi-Quellcode:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
case TrackBar1.Position of
1: Winapi.Windows.Beep(1000,50);
5: Winapi.Windows.Beep(1200,50);
10: Winapi.Windows.Beep(1500,50);
end;
end;

TForm1 17. Jan 2015 21:31

AW: TTrackBar großschrittig auslesen
 
Zitat:

Zitat von himitsu (Beitrag 1286856)
Warum verkleinerst du nicht einfach den Wertebereich?

Wie meinst Du das mit dem Wertebereich? Die Größe des Wertebereiches der Trackbar scheint ja keine Auswirkungen auf die Art und Weise zu haben, wann OnChange ausgelöst wird. Eher die Art und Weise der Mausbewegung, d.h. immer wenn die Maus auch nur um ein Pixel verschoben wird, wird das Event ausgelöst. Ich schätze mal, das hat mit der Zeichenoperation innerhalb der Komponente zu tun.

@hathor: Das Problem besteht darin, dass egal, wie die Position konkret abgefragt wird, das Event immer mehrmals aufgerufen wird, ohne dass sich die Position geändert hätte. Ich denke mal, die sinnvollste Lösung ist es dann einfach zu prüfen, ob sich die Position des Zeigers geändert hat oder nicht und wenn ja, dann mit der neuen Position die Information weiter zu verarbeiten.

PS: Ach so. Die Positionen sind bei meiner TrackBar immer ganzzahlig (ich weiß nicht ob man das noch anders einstellen kann) und daher sind auch keine Dezimalwerte zur Abfrage möglich.

himitsu 17. Jan 2015 22:13

AW: TTrackBar großschrittig auslesen
 
Nee, die Größe hat keine Auswirkung, aber wenn du sowieso nur die ganzen Zahlen willst, dann kann man doch locker die Ungeaden einfach weg lassen. :angel:


Ich finde es nicht mehr, aber mir was so, als wenn die TrackBar und Scrollbar (von Windows) eigentlich auch den Modus kennt, wo das Change-Ereignisse erst beim Loslassen der Maustaste ausgelöst wird. :gruebel:

Ansonsten kann man das selber machen
* Timer starten und das Ereignis erst auswerten nach Zeitablauf
* oder auf die gerückte Maustaste reagieren, aber was ist, wenn man nicht die Maus zum Bedienen benutzt...

TForm1 17. Jan 2015 22:46

AW: TTrackBar großschrittig auslesen
 
Zitat:

Zitat von himitsu (Beitrag 1286864)
Ich finde es nicht mehr, aber mir was so, als wenn die TrackBar und Scrollbar (von Windows) eigentlich auch den Modus kennt, wo das Change-Ereignisse erst beim Loslassen der Maustaste ausgelöst wird. :gruebel:

Da ich mit Lazarus auf Mac kompiliere, kann ich dazu nichts sagen, aber eigentlich sollte es da doch keinen Unterschied zwischen Mac und Windows geben, oder? Ist aber auch egal da ich jetzt mit der Abfrage nach der Positionsänderung sehr gut klar komme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 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