Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Elegante Lösung für While-LButton-Pressed-Loop (https://www.delphipraxis.net/190460-elegante-loesung-fuer-while-lbutton-pressed-loop.html)

Codehunter 6. Okt 2016 09:22

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

Uwe Raabe 6. Okt 2016 09:27

AW: Elegante Lösung für While-LButton-Pressed-Loop
 
Zitat:

Zitat von Codehunter (Beitrag 1349945)
Gibt es nicht vllt. eine Art wiederkehrender Windows-Message?

WM_TIMER ist doch genau das :gruebel: Und dazu noch weitgehend anpassbar: Intervall, an/aus. Ich kann mir keine geeignetere Message vorstellen.

Codehunter 6. Okt 2016 09:56

AW: Elegante Lösung für While-LButton-Pressed-Loop
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1349947)
Zitat:

Zitat von Codehunter (Beitrag 1349945)
Gibt es nicht vllt. eine Art wiederkehrender Windows-Message?

WM_TIMER ist doch genau das :gruebel: Und dazu noch weitgehend anpassbar: Intervall, an/aus. Ich kann mir keine geeignetere Message vorstellen.

Jo, soweit schon klar ^^ Hätte ja sein können es gibt inzwischen eine Message a la "WM_LBUTTON_FURTHERMORE_DOWN" oder sowas ;) Also eine Art Chimäre aus WM_LBUTTON_DOWN und WM_TIMER, die von Haus aus an ein bestimmtes Windowhandle gesendet wird. WM_TIMER ist ja sozusagen "ungezielt". Aber vielleicht bin ich gedanklich auch nur irgendwo falsch abgebogen...

sakura 6. Okt 2016 10:57

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:...

ConnorMcLeod 6. Okt 2016 12:58

AW: Elegante Lösung für While-LButton-Pressed-Loop
 
in der winproc...
Delphi-Quellcode:
  case
    WM_LBUTTONDOWN:
      begin
        gbMouseDown := True;
        StartTimer;
      end;
    WM_LBUTTONUP: gbMouseDown := False;
  end;
im Timer:
Delphi-Quellcode:
  if gbMouseDown then begin
    inc(giCounter);
  end else begin
    KillTimer;
  end;
Anstatt Timer ginge auch ein Thread, würde mir besser gefallen ;-)

p80286 6. Okt 2016 13:09

AW: Elegante Lösung für While-LButton-Pressed-Loop
 
Zitat:

Zitat von sakura (Beitrag 1349969)
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:...

Hardware?
Da fällt mir das Keyboard ein, und wenn ich mich recht erinnere, kann das fortlaufende Events generieren.

Gruß
K-H

Uwe Raabe 6. Okt 2016 13:22

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:

Zitat von Codehunter (Beitrag 1349945)
Wenn man auf die Up- bzw. Down-Buttons klickt und gedrückt hält, soll ein Wert hochgezählt werden.


sakura 6. Okt 2016 13:23

AW: Elegante Lösung für While-LButton-Pressed-Loop
 
Zitat:

Zitat von p80286 (Beitrag 1349986)
Hardware?
Da fällt mir das Keyboard ein, und wenn ich mich recht erinnere, kann das fortlaufende Events generieren.

Hardware kann das natürlich machen, aber für Mäuse ist das nun mal nicht so definiert.

...:cat:...

Codehunter 7. Okt 2016 11:30

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...

DeddyH 7. Okt 2016 12:01

AW: Elegante Lösung für While-LButton-Pressed-Loop
 
Sieht schick aus :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.
Seite 1 von 2  1 2      

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