AGB  ·  Datenschutz  ·  Impressum  







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

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 4  1 23     Letzte » 
Luki206
(Gast)

n/a Beiträge
 
#1

TImage Doppelklick bei gesetzten OnClick Event

  Alt 31. Aug 2014, 18:41
Hi, ich habe folgendes Problem: Ich habe einem Image ein OnClick Event zugewiesen und möchte jetzt dazu auch noch ein OnDblClick hinzufügen nur geht das nicht so wie ich mir das vorstelle. Denn wenn ich auf das Image doppelklicke dann nimmt das Programm es als zwei mal OnClick und nicht als OnDblClick an. Wie kann ich das ändern?
Danke
Luki
  Mit Zitat antworten Zitat
nuclearping

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

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 31. Aug 2014, 19:55
Du brauchst eine Zeitmessung, wo entschieden wird, ob es Doppel- oder Einfachklick ist. Damit du nicht dafür einen TTimer vergewaltigst, kannst du hier auch zB mit GetTickCount arbeiten. 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.

Delphi-Quellcode:
var
  StartTicks, CurTicks, PassedMs: Cardinal;
begin
  StartTicks := GetTickCount;
  repeat
    CurTicks := GetTickCount;
    PassedMs := CurTicks - StartTicks;
    WriteLn(PassedMs, 'ms');
    Sleep(100);
  until FALSE;
end;
  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
 
#3

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 31. Aug 2014, 22:05
Ich hätte ja gedacht, dass die Erkennung durch das Betriebssystem erfolgt:
http://de.wikipedia.org/wiki/Doppelklick#Mausaktionen

der Doppelklick: das zweimalige Drücken der Maustaste kurz hintereinander, wobei die Maus nicht bewegt wird. Manche Programme unterstützen auch Drei- bis Fünffachklicks. Aufgrund der schwierigen Ausführung haben sich letztere aber nicht durchgesetzt. Bei den meisten Betriebssystemen ist der Zeitabstand einstellbar, in der die zweite Tastenbetätigung erfolgen muss, um als Doppelklick akzeptiert zu werden. Manchmal ist auch ein Schwellwert einstellbar, wie weit sich die Maus zwischen den beiden Klicks bewegen darf, da sich bei hochempfindlichen Mäusen ein vollkommener Stillstand kaum noch realisieren lässt.
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
43.114 Beiträge
 
Delphi 12 Athens
 
#4

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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
 
#5

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
43.114 Beiträge
 
Delphi 12 Athens
 
#6

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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

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
 
#8

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
 
#9

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
 
#10

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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:20 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