Wie unterscheidet man Linksklick von Doppellinksklick?

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Wie unterscheidet man Linksklick von Doppellinksklick?

Beitrag 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?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Beitrag 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)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Beitrag 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?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Frage: Wie unterscheidet man inksklick von Doppellinkskl

Beitrag 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 :)
Antworten