AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TImage Doppelklick bei gesetzten OnClick Event
Thema durchsuchen
Ansicht
Themen-Optionen

TImage Doppelklick bei gesetzten OnClick Event

Ein Thema von Luki206 · begonnen am 31. Aug 2014 · letzter Beitrag vom 21. Sep 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

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

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 31. Aug 2014, 22:17
Wenn die Erkenneung durch das OS automatisch passieren würde, dann würden die Klickereignisse alle verzögert und das ist auch nicht so schön.


Das ist wie im FMX, wenn man schnell/kurz auf einen TButton klickt, dann sieht man das nicht, da der Button eben nicht kurz niederedrückt wird, so wie man das vom Windows und anderen OSen eigentlich kennt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (31. Aug 2014 um 22:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 31. Aug 2014, 22:25
Also die Erkennung erfolgt durch das Betriebssystem ... aber

bei jedem Doppel-Klick wird brav OnDblClick ausgelöst allerdings vorher wird OnClick noch ausgelöst. Es gibt damit also 2 Events die ausgelöst werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 31. Aug 2014, 22:38
Es gibt damit also 2 Events die ausgelöst werden.
Jupp, das meinte ich auch so in etwa.

Wenn man vor dem Auslösen des OnClick-Events noch warten würde, ob es nicht vielleicht doch ein OnDblClick wird, dann wäre das nicht ganz so praktischt.
Wenn man wirklich OnClick und OnDblClick parallel haben will und dabei OnClick nicht mit ausgelöst werden soll, wenn das Andere, dann wird man das wohl selber behandeln müssen, da es sich allgemein/immer leider nicht umsetzen lässt. (vielleicht könnte man ins OS eine Option einbauen, welche bei Komponenten einzeln aktivierbar sind)


Sellt mal die Behindertenoption ein ... Doppelklickerkennung auf 2,5 Sekunden
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 06:51
bei jedem Doppel-Klick wird brav OnDblClick ausgelöst allerdings vorher wird OnClick noch ausgelöst. Es gibt damit also 2 Events die ausgelöst werden.
Wie erkenne ich dann im On*Click*, das ein Doppelklick durchgeführt wurde?
Du speicherst den TickCount beim OnClick und schaust beim nächsten OnClick, ob dieser innerhalb von zB 200ms liegt. Wenn ja, ist es ein Doppelklick.
Hmm. Das zweite OnClick wird doch gar nicht ausgeführt. OnClick wird nur beim 1.Click aufgerufen. Beim 2.Click wird OnDblClick aufgerufen (oder gar nichts, wenn kein entsprechendes Event zugewiesen wurde). Ergo *kann* man im OnClick keine Zeitmessung durchführen, anhand derer ein Doppelklick erkannt wird. Ein Dreifachklick würde gehen, aber das ist ja hier nicht gefragt.

Wie geht das also dann? Im OnClick muss ich einen Timer starten, der kurze Zeit später das eigentliche OnClick startet. Im OnDblClick resette ich den Timer und schalte ihn aus. Das Interval des Timers setze ich auf GetDoubleClickTime+20, also etwas länger als die Doppelklickzeit.

Allerdings würde ich mir die User Experience nochmal durch den Kopf gehen lassen: Vermutlich ist es keine gute Idee, bei einer Komponente sowohl Einfach- als auch Doppelklicks zu erlauben. Ziehen und Doppelklick kenne ich, aber 1x und 2x nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 07:07
Der Benutzer ist durchaus mit Klick und Doppelklick vertraut.

Ein Klick im Explorer setzt die angeklickte Datei auf ausgewählt und ein Doppelklick öffnet die Datei. Aber es geht eben nur wenn die beiden Aktionen sich nicht gegenseitig behindern.

Sonst benötigt man tatsächlich dieses Timer-Gedöns, was allerdings bei einem Doppelklick-Intervall von mehr als 1 Sekunde (ja, bestimmt ungewöhnlich) seltsam bis störend wirkt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 07:23
Ein Klick im Explorer setzt die angeklickte Datei auf ausgewählt und ein Doppelklick öffnet die Datei. Aber es geht eben nur wenn die beiden Aktionen sich nicht gegenseitig behindern.
Da habe ich mich blöd ausgedrückt: Ich meinte eine Aktion A beim Klicken und eine andere Aktion B beim Doppeklicken, sodaß A beim Doppelklick *nicht* aufgerufen wird.

Es ist auch beim Explorer manchmal blöd, das eine Datei ausgewählt wird, obwohl ich sie öffnen will.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 08:02
Ja, ein Doppelklick Event kommt eben immer mit einem vorhergehenden Klick Event daher (Vorgabe durch das Betriebssystem).

Ohne das Gefriemel (z.B. Timer) kann man die nicht isoliert behandeln.

Besser wäre es wohl, das Konzept zu überdenken um den Benutzer nicht zu überraschen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 08:46
Hmm. Das zweite OnClick wird doch gar nicht ausgeführt. OnClick wird nur beim 1.Click aufgerufen. Beim 2.Click wird OnDblClick aufgerufen (oder gar nichts, wenn kein entsprechendes Event zugewiesen wurde). Ergo *kann* man im OnClick keine Zeitmessung durchführen, anhand derer ein Doppelklick erkannt wird.
Natürlich. Wenn du explizit dieses Verhalten willst, darfst du keinen OnDblClick zuweisen, sondern eine Verzweigung, ob entweder ein DoClick oder DoDblClick ausgeführt werden soll, im OnClick implementieren.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 08:59
Hmm. Das zweite OnClick wird doch gar nicht ausgeführt. OnClick wird nur beim 1.Click aufgerufen. Beim 2.Click wird OnDblClick aufgerufen (oder gar nichts, wenn kein entsprechendes Event zugewiesen wurde). Ergo *kann* man im OnClick keine Zeitmessung durchführen, anhand derer ein Doppelklick erkannt wird.
Natürlich. Wenn du explizit dieses Verhalten willst, darfst du keinen OnDblClick zuweisen, sondern eine Verzweigung, ob entweder ein DoClick oder DoDblClick ausgeführt werden soll, im OnClick implementieren.
Und woran machst du im OnClick fest, dass ein DoDblClick ausgeführt werden soll? OnClick bekommt nur "Sender" sonst gar nix. Über OnMouseDown könnts evtl eher klappen, aber auch da kommt man bei Doppelklick zweimal rein, einmal ohne ssDouble und einmal mit ssDouble, also wieder nix gewonnen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 1. Sep 2014 um 09:05 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#10

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 09:57
Zitat:
Ein Doppelklick wird durch die Mauseinstellungen des Betriebssystems des Benutzers bestimmt. Der Benutzer kann den Zeitraum festlegen, innerhalb dessen der zweite Mausklick erfolgen muss, damit zwei aufeinander folgende Mausklicks als Doppelklick erkannt werden. Bei jedem Doppelklick auf ein Steuerelement wird das Click-Ereignis ausgelöst. Wenn Sie z. B. über einen Ereignishandler für das Click-Ereignis und für das DoubleClick-Ereignis eines Form verfügen, wird das Click-Ereignis und das DoubleClick-Ereignis ausgelöst, wenn auf das Formular doppelgeklickt wird und beide Methoden aufgerufen werden. Bei einem Doppelklick auf ein Steuerelement, das das DoubleClick-Ereignis nicht unterstützt, wird das Click-Ereignis möglicherweise zweimal ausgelöst.

Damit dieses Ereignis ausgelöst wird, müssen Sie den StandardClick-Wert von ControlStyles auf true festlegen.

http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx
http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx

Zitat:

Normalerweise initiiert ein einzelner Klick eine Benutzeroberflächenaktion, und mit einem Doppelklick wird die Aktion erweitert. Beispielsweise wird mit einem Klick für gewöhnlich ein Element ausgewählt und dieses mit einem Doppelklick bearbeitet. Die Windows Forms-Klickereignisse lassen jedoch nur schwer ein Szenario zu, in dem ein Klick und ein Doppelklick inkompatible Aktionen ausführen, da eine mit dem Click-Ereignis oder dem MouseClick-Ereignis verknüpfte Aktion vor der mit dem DoubleClick-Ereignis oder dem MouseDoubleClick-Ereignis verknüpften Aktion ausgeführt wird. Dieses Thema zeigt zwei Lösungen für dieses Problem auf. Eine Lösung besteht darin, das Doppelklickereignis zu behandeln und die Aktionen bei der Behandlung des Klickereignisses per Rollback zurückzusetzen. In wenigen Situationen müssen Sie möglicherweise das Klick- und Doppelklickverhalten simulieren, indem Sie das MouseDown-Ereignis behandeln und die DoubleClickTime-Eigenschaft und die DoubleClickSize-Eigenschaft der SystemInformation-Klasse verwenden. Sie messen die Zeit zwischen den Klicks, und wenn ein zweiter Klick erfolgt, bevor der DoubleClickTime-Wert erreicht wird und der Klick innerhalb eines durch DoubleClickSize definierten Rechtecks stattfindet, führen Sie die Doppelklickaktion aus; andernfalls führen Sie die Klickaktion aus.

Gewusst wie: Unterscheiden zwischen Klicks und Doppelklicks
http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx

Geändert von hathor ( 1. Sep 2014 um 10:03 Uhr)
  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 11:01 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