Elegante Lösung für While-LButton-Pressed-Loop
Hallo!
Gibt es eine elegante Lösung für das Problem eines getriggerten LButtonDown? Folgende Zielstellung: Eine Komponente vergleichbar mit SpinEdit, abgeleitet von TWinControl. Zwei Buttons (allerdings gefaked, nur per StyleServices auf Canvas gepinselte Bildchen). Wenn man auf die Up- bzw. Down-Buttons klickt und gedrückt hält, soll ein Wert hochgezählt werden. Im originalen TSpinEdit ist das letztendlich über Timer gelöst. Nur frage ich mich: Ist das die einzige (vernünftige) Möglichkeit? Gibt es nicht vllt. eine Art wiederkehrender Windows-Message? Grüße Cody |
AW: Elegante Lösung für While-LButton-Pressed-Loop
Zitat:
|
AW: Elegante Lösung für While-LButton-Pressed-Loop
Zitat:
|
AW: Elegante Lösung für While-LButton-Pressed-Loop
Nein, da auch die Hardware nur zwei Events sendet, Button down und Button up, erzeugt auch Windows keine weiteren Botschaften. Da bleibt dann nur ein Timer als Alternative.
...:cat:... |
AW: Elegante Lösung für While-LButton-Pressed-Loop
in der winproc...
Delphi-Quellcode:
im Timer:
case
WM_LBUTTONDOWN: begin gbMouseDown := True; StartTimer; end; WM_LBUTTONUP: gbMouseDown := False; end;
Delphi-Quellcode:
Anstatt Timer ginge auch ein Thread, würde mir besser gefallen ;-)
if gbMouseDown then begin
inc(giCounter); end else begin KillTimer; end; |
AW: Elegante Lösung für While-LButton-Pressed-Loop
Zitat:
Da fällt mir das Keyboard ein, und wenn ich mich recht erinnere, kann das fortlaufende Events generieren. Gruß K-H |
AW: Elegante Lösung für While-LButton-Pressed-Loop
Hier geht es aber um den linken Mouse-Button (genauer gesagt, der in den Mouse-Settings dafür eingestellt wurde):
Zitat:
|
AW: Elegante Lösung für While-LButton-Pressed-Loop
Zitat:
...:cat:... |
AW: Elegante Lösung für While-LButton-Pressed-Loop
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, das Komponentchen ist fertig. Mit zweistufig schnellem Spinbutton-Repeat und absolut flickerfrei. Und Theme-Aware...
Die Ideenvorlage dafür war der ColorPickerDialog von PaintShopPro (die RGB-Spinner im unteren Bereich). Wobei es dort sowas von gar nicht flickerfrei realisiert ist. Insofern sogar besser ^^ Die Quellcodes kommen auch noch, will ich nur noch vorher etwas aufhübschen... |
AW: Elegante Lösung für While-LButton-Pressed-Loop
Sieht schick aus :thumb:
|
AW: Elegante Lösung für While-LButton-Pressed-Loop
Liste der Anhänge anzeigen (Anzahl: 2)
Und weil ich schon mal dabei war, hab ich gleich auch noch das ColorWheel nachgebaut. Man beachte das AntiAliasing am Farbrad sowie das farbinvertierte Caret auf dem Farbrad, das ebenfalls antialiased ist. Natürlich wieder ThemeAware, performant und flickerfrei ^^
Im Unterschied zu dem Original im PaintShopPro zeigt das Quadrat in der Mitte aber nicht das HSL-Farbmodell an sondern das HSV-Modell, so wie es auch dem Farbrad entspricht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 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