Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TImage Doppelklick bei gesetzten OnClick Event (https://www.delphipraxis.net/181641-timage-doppelklick-bei-gesetzten-onclick-event.html)

Luki206 31. Aug 2014 18:41

TImage Doppelklick bei gesetzten OnClick Event
 
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 :spin:

nuclearping 31. Aug 2014 19:55

AW: TImage Doppelklick bei gesetzten OnClick Event
 
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;

Sir Rufo 31. Aug 2014 22:05

AW: TImage Doppelklick bei gesetzten OnClick Event
 
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.

himitsu 31. Aug 2014 22:17

AW: TImage Doppelklick bei gesetzten OnClick Event
 
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.

Sir Rufo 31. Aug 2014 22:25

AW: TImage Doppelklick bei gesetzten OnClick Event
 
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.

himitsu 31. Aug 2014 22:38

AW: TImage Doppelklick bei gesetzten OnClick Event
 
Zitat:

Zitat von Sir Rufo (Beitrag 1270450)
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 :stupid:

Dejan Vu 1. Sep 2014 06:51

AW: TImage Doppelklick bei gesetzten OnClick Event
 
Zitat:

Zitat von Sir Rufo (Beitrag 1270450)
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?
Zitat:

Zitat von nuclearping (Beitrag 1270440)
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.

Sir Rufo 1. Sep 2014 07:07

AW: TImage Doppelklick bei gesetzten OnClick Event
 
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.

Dejan Vu 1. Sep 2014 07:23

AW: TImage Doppelklick bei gesetzten OnClick Event
 
Zitat:

Zitat von Sir Rufo (Beitrag 1270467)
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.

Sir Rufo 1. Sep 2014 08:02

AW: TImage Doppelklick bei gesetzten OnClick Event
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
Seite 1 von 4  1 23     Letzte »    

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