![]() |
AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
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:
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.
WM_LBUTTONDOWN -> WM_LBUTTONUP -> WM_LBUTTONDBLCLK -> WM_LBUTTONUP
Delphi-Spezifisch In Delphi selber kann man sich darauf verlassen, dass es zu einem
Delphi-Quellcode:
Event auch ein
MouseUp
Delphi-Quellcode:
Event gegeben hat (diese tauchen also zeitlich getrennt immer paarweise auf). Darum wird in Delphi auch der
MouseDown
Delphi-Quellcode:
Event bei der Nachricht WM_LBUTTONDBLCLK ausgelöst, denn sonst würde bei einem DoppelKlick dieser Paarlogik gebrochen.
MouseDown
Es geht auch anders Bei Microsoft und WinForms, da wird der
Delphi-Quellcode:
und
Click
Delphi-Quellcode:
Event erst bei
DoubleClick
Delphi-Quellcode:
ausgelöst. Allerdings bekommt man hier nun ein etwas anderes Verhalten bei einem Doppelklick.
MouseUp
So kann man hier einen
Delphi-Quellcode:
wie den
DoubleClick
Delphi-Quellcode:
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.
Click
|
AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
Zitat:
Natürlich war mir klar, dass sich Borland seinerzeit etwas dabei gedacht hat. Die Erklärung von Schokohase habe ich dann beim zweiten Durchlesen begriffen. In all den Jahren war ich fest der Überzeugung, dass die Reihenfolge so ist:
Delphi-Quellcode:
. Soso, WM_LBUTTONCLK gibt es gar nicht. Und der Doppelklick kommt vom Betriebssystem. Jetzt verdrehen hier alle alten Hasen die Augen, aber ich bin mir völlig sicher, dass so mancher stiller Mitleser ebenso platt ist wie ich.
WM_LBUTTONDOWN -> WM_LBUTTONUP -> WM_LBUTTONCLK -> WM_LBUTTONDBLCLK
Also: Bei jedem MouseDown aufpassen, wenn es auch noch ein DblClick gibt. Der Tipp von Uwe mit
Delphi-Quellcode:
ist dabei sehr nützlich. Das ist ja ein Minenfeld hier.
(ssDouble in Shift)
|
AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
Es steht aber
![]() Zitat:
|
AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
Aber klar ist es das. Und ganz bestimmt habe ich nicht alle Dokumentation über alles gelesen. Das haben die Profis aber immer wieder auch nicht, wie man hier unschwer mitlesen kann. Die über solche grundlegenden Dinge wie Mausereignisse aber vermutlich schon. Schön für die Profis. Sie wären aber vermutlich nicht mehr lange Profis, wenn sie es nicht täten.
Übrigens hätte mir das Studium der Dokumentation hier auch nur bedingt geholfen. Denn am Ende der Sequenz kommt bei Windos WM_LBUTTONUP, bei Delphi aber MouseDown. Egal, wieder was gelernt. |
AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
Der Hinweis auf die Dokumentation soll ja auch nur die Verwunderung bremsen, weil es eben kein geheimes Wissen ist. Mehr nicht.
Warum Delphi den MouseDown Event feuert habe ich auch erläutert und ja, wenn man mit Delphi für Windows programmiert, dann muss man sich mit Delphi und Windows auseinandersetzen. Da sollte jetzt aber nicht neu sein. Da die Dokumentation von Delphi teilweise schwach bis gar nicht vorhanden ist, muss man dort auch mal in den Source schauen (soweit es möglich ist). |
AW: Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
"Verwunderung" ist ja eine freundliche Umschreibung ...
Der Hobbyprogrammierer unterscheidet sich ja vom Profi (unter anderem) darin, dass er nicht alles von der Pike auf lernt, sondern in der Regel nur das, was er gerade braucht (oder zu brauchen glaubt). Das bringt Lücken mit sich, die dem Profi die Haare zu Berge stehen lassen. Das Problem hier bestand darin, dass ich gar nicht auf die Idee kam, meine Vorstellung vom Ablauf eines Doppelklicks zu hinterfragen (so wie auch ![]() Natürlich ist es auch schön, wenn man mal den Platz auf der anderen Seite der Schulbank einnehmen kann. Und da verwundert es nicht, dass es hier strenge pädagogische Prinzipien gibt, und zwar noch von der guten alten Art. Ein ehernes lautet: Eigenleistung! Das Kind bekommt nichts fertig vorgesetzt, es soll sich selber anstrengen! Wenig hat mich so erheitert wie ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz