Einzelnen Beitrag anzeigen

Schokohase
(Gast)

n/a Beiträge
 
#11

AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)

  Alt 31. Dez 2018, 13:09
Ok, ich war da eben nicht ganz korrekt mit meiner Antwort.

Ein Click ist wie folgt deklariert: Ein WM_LBUTTONDOWN und WM_LBUTTONUP Nachricht muss innerhalb der Grenzen eines Controls erfolgen. Die Zeitspanne zwischen WM_LBUTTONDOWN und WM_LBUTTONUP ist unerheblich (können auch mehrere Stunden sein, wenn man keinen Krampf im Finger bekommt).

Ein DoubleClick ist da schon etwas anderes. Das Betriebssystem selber erkennt den DoubkeClick und sendet dann eine WM_LBUTTONDBLCLK Nachricht. Auslöser dafür ist das erneute drücken der Maustaste innerhalb eines bestimmten Zeitraums innerhalb bestimmter Grenzen (einstellbar im Betriebssystem).

Für jeden DoppelKlick erhält man also folgende Nachrichten:
Code:
WM_LBUTTONDOWN -> WM_LBUTTONUP -> WM_LBUTTONDBLCLK -> WM_LBUTTONUP
Das System sendet nun also anstatt einer simplen WM_LBUTTONDOWN eine WM_LBUTTONDBLCLK Nachricht (aufgepasst, die Maus-Taste ist noch gedrückt) und wenn die Taste losgelassen wird wie gehabt eine WM_LBUTTONUP Nachricht.

Delphi-Spezifisch

In Delphi selber kann man sich darauf verlassen, dass es zu einem MouseUp Event auch ein MouseDown Event gegeben hat (diese tauchen also zeitlich getrennt immer paarweise auf). Darum wird in Delphi auch der MouseDown Event bei der Nachricht WM_LBUTTONDBLCLK ausgelöst, denn sonst würde bei einem DoppelKlick dieser Paarlogik gebrochen.

Es geht auch anders

Bei Microsoft und WinForms, da wird der Click und DoubleClick Event erst bei MouseUp ausgelöst. Allerdings bekommt man hier nun ein etwas anderes Verhalten bei einem Doppelklick.

So kann man hier einen DoubleClick wie den Click herauszögern oder sogar verhindern, wenn man beim zweiten Drücken die Taste festhält und dann eine beliebige Zeitspann wartet und dann irgendwann die Maustaste löst.
  Mit Zitat antworten Zitat