AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)

Ein Thema von CodeX · begonnen am 12. Mär 2010 · letzter Beitrag vom 1. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2      
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#1

Doppelklick in MouseDown erkennen (MouseDown vs. DblClick)

  Alt 12. Mär 2010, 23:40
Ich möchte beim TrayIcon (CoolTrayIcon) gerne unterschiedliche Aktionen je nach Klick-Art durchführen.

Im OnMouseDown Ereignis greife ich nun die linke und die rechte Maustaste ab und im OnDblClick Ereignis einen Doppelklick. Das Problem ist nun, dass bei einem Doppelklick auch das Ereignis vom einfachen Linksklick durchgeführt wird, was natürlich nicht sein darf.

Wie kann ich jetzt im OnMouseDown Ereignis erkennen, ob es sich bei diesem Klick um Teil eines Doppelklicks handelt, um die Aktion dann entsprechend nicht auszuführen? Sender, Button, Shift und X,Y helfen mir da irgendwie nicht weiter...

Oder ganz anders?
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Doppelklick in MouseDown erkennen (MouseDown vs. DblClic

  Alt 13. Mär 2010, 00:12
Das Problem ist, dass der Einfachklick schon vor dem Doppelklick ausgelöst wird. Das bedeutet also, dass du das nur umgehen kannst, wenn du nach einem Einfachklich eine bestimmte Zeit wartest und erst dann reagierst, wenn in dieser Zeit kein 2. mal geklickt wurde. Das ganze wird dann sehr unschön, weil es ungewohnt ist, dass nicht sofort auf einen Einfachklich reagiert wird. Du solltest dir also vorher nochmal überlegen ob das sinnvoll ist...
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

Re: Doppelklick in MouseDown erkennen (MouseDown vs. DblClic

  Alt 13. Mär 2010, 10:37
gibts denn bei Deinem CoolTrayIcon kein OnClick Event und OnDblClick Event?
hat doch eigentlich jede Komponente, probiere es mit einem Panel aus.
Da wird alles schon unterschieden .. und macht Windows automatisch.
die persönlich gewünschte Sensitivität zur Unterscheidung von Click und Dbl Click kann man doch in der Systemsteuerung einstellen ..
Wenn Du noch linke und rechte Maustaste unterscheiden willst, dann merke Dir im OnMousedown, was geklickt wurde, und im OnClick machst Du die entsprechenden Sachen, MouseDown kommt eher als OnClick
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#4

Re: Doppelklick in MouseDown erkennen (MouseDown vs. DblClic

  Alt 13. Mär 2010, 16:21
Das Problem ist, dass OnClick nicht bei einem Rechtsklick ausgeführt wird. D.h. es bringt auch nichts, sich die Maustausche bei OnMouseDown zu merken. Das war der Grund, warum ich auf OnClick verzichten wollte. Aber nun gut, jetzt habe ich das auf die einzelnen Ereignisse verteilt. Linksklick greife ich bei OnClick ab, Doppelklick bei OnDblClick und den Rechtsklick bei OnMouseDown mit Button = mbRight.

Damit sollte das jetzt passen. Danke für Eure Hinweise!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Doppelklick in MouseDown erkennen (MouseDown vs. DblClic

  Alt 13. Mär 2010, 16:27
Nimm statt OnMouseDown besser OnMouseUp ... erstmal kann es so keine Probleme bei der Tastenbehandlung ergeben, da der Mausklick an dieser Stelle quasi schon beendet ist.

Außerdem kann man, wie bei einem Linksklick auch den Klick noch "abbrechen",
so wie es z.B. standardmäßig bei allen Buttons und Menüs auch ist.

> Mit Rechts anklicken, die Maus wegziehen und dann erst die Taste loslassen = kein Rechtsklick.
$2B or not $2B
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#6

Re: Doppelklick in MouseDown erkennen (MouseDown vs. DblClic

  Alt 13. Mär 2010, 16:46
Du hast Recht. Vielen Dank!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

Re: Doppelklick in MouseDown erkennen (MouseDown vs. DblClic

  Alt 15. Mär 2010, 12:45
Dieses Verhalten, daß bei einem Doppelklick mindestens ein oder gar zwei Einfachklickereignis(se) erkannt werden (bei einem vorher, bei zweien eines davor und eines danach), stört mich auch. Mir fiel es auch auf, und zwar als erstes in der TTrayIcon-Klasse in Lazarus, dann auch in der gleichnamigen Klasse in Turbo-Delphi auf.

Dass muß jedoch nicht so sein! Die Komponente CoolTrayIcon (sie liefert zwei TNA-Icons (ein animierbares und ein textuelles), kann in der mir vorliegenden Version (4.3.1) zwischen Einfach- und Doppelklick sauber unterscheiden. Ich werde wohl mal die Quelltexte dieser Komponente inspizieren.

Weiß jemand, ob Windows selbst schon zwischen diese beiden Klickarten unterscheiden kann/muß?

Edit: Inzwischen herausgefunden, daß bei CoolTrayIcon nach dem sog. MouseUpEvent noch ein klein wenig (nur unauffällig wenig, also nicht störend) Zeit (in der Variable GetDoubleClickTime fixiert) vergeht, bis das Einfachklickereignes ausgelöst wird, anzunehmenderweise, um zur Sicherheit abzuwarten, ob nicht doch ein Doppelklick vorliegt.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
560 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 30. Dez 2018, 22:28
Da der Titel gut passt (der Inhalt ist eigentlich etwas anders), mache ich kein neues Thema auf.

Nachdem mich ein völlig unerklärlicher Bug eben völlig verrückt gemacht hat, habe ich ich bei einem Blick in Vcl.Controls gesehen, dass Delphi nach einem Doppelklick noch ein MouseDown anhängt.

Dass vorher MouseDown und MouseUp und Click und was weiß ich was kommen, dass wusste ich ja, aber ein unmotiviertes, überfallartiges MouseDown einfach so nach beendetem Doppelklick - wer denkt sich sowas aus ?!?!

Ich habe jetzt ein If GetKeyState(VK_LBUTTON) < 0 eingefügt, um das "echte" MouseDown zu erkennen (siehe übrigens auch hier). Welchem Zweck dient dieses bescheuerte MouseDown?
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#9

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

  Alt 31. Dez 2018, 09:24
Überleg doch einfach mal wann ein MouseDown und MouseUp Event kommt.

Genau, wenn man den Maus-Button herunterdrückt (Down) und wieder loslässt (Up).

Und was ist ein Doppelklick?

Genau, wenn man hintereinander zweimal den Maus-Button herunterdrückt und loslässt.

Diese Events kommen also nicht von Delphi sondern von deinem Finger auf der Maus. Die einzig berechtigte Frage hier ist ob es wirklich sinnvoll ist wenn (in Delphi) der Doppelklick anhand des MouseDown Events erkannt wird. Schliesslich wird der einfache Klick anhand des MouseUp Events erkannt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 31. Dez 2018, 12:17
Da der Titel gut passt (der Inhalt ist eigentlich etwas anders), mache ich kein neues Thema auf.
Finde ich jetzt nicht wirklich gut.

Nachdem mich ein völlig unerklärlicher Bug eben völlig verrückt gemacht hat, habe ich ich bei einem Blick in Vcl.Controls gesehen, dass Delphi nach einem Doppelklick noch ein MouseDown anhängt.
Ja, tut es! Und zwar ganz bewusst mit einem [ssDouble] als ShiftState, damit man das auch im Eventhandler erkennen kann. Im OnMouseDown werden nämlich auch die Koordinaten mitgegeben, die im OnDblClick fehlen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:39 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