Seite 1 von 1

Wie unterscheidet man Linksklick von Doppellinksklick?

Verfasst: 29.09.2019 11:44
von bin_neu_hier
Hallo Allerseits!

in der PB-Hilfe ist ein Beispiel zum Thema EventType(), in dem LinksKlick und Doppellinksklick abgefragt werden, ungefähr so:

Code: Alles auswählen

Select EventType()
Case #PB_EventType_LeftClick
   debug "links"
Case #PB_EventType_LeftDoubleClick
   debug "doppellinks"
Endselect
Da ja jeder Doppelklick mit einem Einfachklick beginnt, gibt Debug zuerst "links" und dann "dopppellinks" aus. Wie unterscheidet man die Klickarten "sauber" voneinander? Ein einfacher Linksklick ist ja erst dann einer, wenn nicht innerhalb soundsovieler millisekunden kein zweiter linksklick folgt. Wie unterscheidet man das?

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Verfasst: 29.09.2019 13:57
von mk-soft
Eigentlich gar nicht

Das Problem ist das man zu lange warten muss um den unterschied zwischen LeftClick und LeftDoubleClick zu unterscheiden.
Somit dauert es zu lange um auf einem LeftClick zu reagieren.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 140, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListViewGadget(0, 10, 10, 250, 120)
  For a = 1 To 12
    AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview")   ; definieren des Listview-Inhalts
  Next
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Select EventType()
              Case #PB_EventType_LeftClick
                ;Debug "LeftClick"
                AddWindowTimer(0, 1000, DoubleClickTime())
              Case #PB_EventType_LeftDoubleClick
                Debug "LeftDoubleClick"
                RemoveWindowTimer(0, 1000)
            EndSelect
        EndSelect
      Case #PB_Event_Timer
        Select EventTimer()
          Case 1000
            Debug "Delayed LeftClick"
            RemoveWindowTimer(0, 1000)
        EndSelect
            
    EndSelect
  ForEver
EndIf

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Verfasst: 29.09.2019 15:27
von RSBasic
Da die Doppelklickzeit je Windows-Konfiguration auch mal unterschiedlich sein kann, wenn der Benutzer das explizit eingestellt hat, ist es empfehlenswert, die echte Zeit zu ermitteln:

Code: Alles auswählen

Debug GetDoubleClickTime_()
(nur für Windows)

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Verfasst: 29.09.2019 15:46
von STARGÅTE
Unterscheidet sich das von DoubleClickTime()?

Code: Alles auswählen

Debug DoubleClickTime()
Debug GetDoubleClickTime_()
500
500
Zu der aussage von bin_neu_hier:
"Ein einfacher Linksklick ist ja erst dann einer, wenn nicht innerhalb soundsovieler millisekunden kein zweiter linksklick folgt."
Ist das wirklich so?
Ich hätte gesagt, LeftClick ist definiert als: Down + Up (egal was davor/danach passiert)
LeftDoubleClick ist definiert als: Down + Up + Down (also kein Up mehr nötig)

Die Frage ist auch, in welcher Situation soll ein Doppelklick keinen einfachen Klick auslösen?

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Verfasst: 29.09.2019 15:58
von RSBasic
STARGÅTE hat geschrieben:Unterscheidet sich das von DoubleClickTime()?

Code: Alles auswählen

Debug DoubleClickTime()
Debug GetDoubleClickTime_()
500
500
Oh sry, ich hab das nicht gesehen, dass DoubleClickTime() verwendet wird. Dann ist alles gut.

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Verfasst: 29.09.2019 18:15
von Shardik
Ich habe im Mai 2011 in diesem Beitrag im englischen Forum "Feature Requests and Wishlists" eine Multiplattform-Version von GetDoubleClick() gezeigt. Im August 2011 hat freak im gleichen Thread bekannt gegeben, dass er die GetDoubleClick()-Funktion nativ in PureBasic implementiert hat:
freak hat geschrieben:I added the double click events and a native DoubleClickTime() function as well :)