AGB  ·  Datenschutz  ·  Impressum  







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

ScrollBar nachbauen

Ein Thema von MicMic · begonnen am 14. Jul 2018 · letzter Beitrag vom 15. Jul 2018
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

ScrollBar nachbauen

  Alt 14. Jul 2018, 21:56
Hallo,
ich habe meine eigene Scrollbar, die auch funktioniert.
Nur eines noch nicht, nämlich nach ca. einer halben Sekunde bei gedrückter Maustaste (in der Scrollbar, außerhalb der Scrollleiste) die Scrollleiste bis zum Mauszeiger wandern zu lassen. Mein Code habe ich in OnMouseDown und da wandert die Scrollleiste gleich los. Also ich brauche einen Unterschied, wenn der Benutzer nur kurz mal die Maustaste drückt (Scrollleiste wandert nur eine Position weiter) und wenn er auf der Maustaste draufbleibt. So wie halt bei der echten ScrollBar.

Ich habe da versuche (in OnMouseDown) mit einer While/End Schleife, zwei GetTickCount Werte und Application.ProcessMessages unternommen. Natürlich in OnMouseUp einen Variable gesetzt, damit die While/End-Schleife auch abbrechen kann. Aber das ging nur bedingt denn es kommt ja wohl auch darauf an, was und wieviel Code nach einem wandern der Scrollleiste so passiert. Ich denke, es ist auch nicht die richtige Lösung mit so einer Schleife.

Bleibt da nur ein Thread übrig oder gibt's für so ein Fall einen besonderen Trick?

Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ScrollBar nachbauen

  Alt 14. Jul 2018, 22:39
Es über einen Timer steuern eventuell?
Also Timer wird angeworfen wenn User Maus-Event fürs "hab-jetzt-Taste-gedrückt" wenn Timer fertig dann startet die eigentliche "ich-habe-noch-Taste-gedrückt-und-erwarte-bewegung" Ausführung.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: ScrollBar nachbauen

  Alt 15. Jul 2018, 13:18
Es über einen Timer steuern eventuell?
Also Timer wird angeworfen wenn User Maus-Event fürs "hab-jetzt-Taste-gedrückt" wenn Timer fertig dann startet die eigentliche "ich-habe-noch-Taste-gedrückt-und-erwarte-bewegung" Ausführung.
Danke, hab da bissl rumgetestet. Danach mein Problem an ganz andere Stelle entdeckt.
Meine ScrollBar ändert für eine ListBox die TopIndex bzw. mit SendMessage und WM_HSCROLL/SB_PAGEDOWN wird der Inhalt gescrollt. Die ListBox selbst ist mit WS_EX_COMPOSITED gesetzt. Irgendwie bleibt der erste Scrollzustand mit einem Smooth Scrolling behaftet, der zwar nicht angezeigt wird (wegen WS_EX_COMPOSITED) aber diese Millisekunden werden dennoch verarbeitet, sprich die Reaktion auf "OnMouseDown" in meiner ScrollBar mit anschließenden SendMessage (damit die Listbox scrollt) reagiert versetzt. Dies aber nur beim ersten mal und deshalb kam ich da mit meiner While/End Schleife und Application.ProcessMessages nicht ganz weiter. Ich mach nun einfach "SPI_SETLISTBOXSMOOTHSCROLLING" rein, was leider aber Systemweit gesetzt wird. Nach Programmende schalte ich dann dieses Smooth wieder ein. So geht auch meine While/End Schleife für die ScrollBar und durch dieses SPI_SETLISTBOXSMOOTHSCROLLING sind auch andere Kinderkrankheiten weg, die mir gar nicht zuvor aufgefallen sind.

Alles bissl kompliziert zu beschreiben

Jetzt muss ich nur noch irgendwie SPI_SETLISTBOXSMOOTHSCROLLING abfragen, ob dieses überhaupt aktiviert ist, da ich es ja bei Programmende aktiviere. Soll ja nur aktiviert werden, wenn es vom System her auch vorher aktiv ist.

Dir trotzdem Danke für den Tipp mit dem Timer.

Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ScrollBar nachbauen

  Alt 15. Jul 2018, 14:13
SystemParametersInfo(SPI_SETLISTBOXSMOOTHSCROLLING, 0, @EinBoolean, 0); So könnte man den Wert abfragen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#5

AW: ScrollBar nachbauen

  Alt 15. Jul 2018, 14:24
SystemParametersInfo(SPI_SETLISTBOXSMOOTHSCROLLING, 0, @EinBoolean, 0); So könnte man den Wert abfragen.
Dann aber bitte mit SPI_GETLISTBOXSMOOTHSCROLLING.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ScrollBar nachbauen

  Alt 15. Jul 2018, 14:29
Autsch, ja klar so sollte es sein, mein Fehler!!! Ich sollte echt ma wieder zu Fielmann zum Optiker.
Gruß vom KodeZwerg

Geändert von KodeZwerg (15. Jul 2018 um 14:32 Uhr) Grund: Werbung entfernt.
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: ScrollBar nachbauen

  Alt 15. Jul 2018, 20:36
Danke für die Info zu "SPI_GETLISTBOXSMOOTHSCROLLING"
Michael
  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 12:19 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