Seite 1 von 3

Unterscheidung LeftClick und LeftDoubleClick bei EventType()

Verfasst: 05.08.2005 11:03
von stbi
Moin!

Folgendes Problem: ich will zwischen einem einfachen und einem Doppelklick unterscheiden , aber bei einem Doppelklick liefert EventType() zuerst einen LeftClick und dann den LeftDoubleClick.

Anhand des nachfolgenden Codes (aus dem englischen Forum geklaut und modifiziert) lässt sich das auch nachvollziehen:

Code: Alles auswählen

OpenWindow(0, 0, 0, 250, 300, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "EventType()") 

CreateGadgetList(WindowID(0)) 
ListViewGadget(0, 5, 5, 240, 250) 
For i=0 To 20 
  AddGadgetItem(0, -1, "line......"+Str(i)) 
Next 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      Break 
    Case #PB_Event_Gadget 
      Select EventGadgetID() 
        Case 0 
          Select EventType() 
            Case #PB_EventType_LeftClick : Debug "LeftClick" 
            Case #PB_EventType_LeftDoubleClick : Debug "LeftDoubleClick" 
          EndSelect 
      EndSelect   
  EndSelect 
ForEver  
Im Codearchiv habe ich kein Beispiel gefunden, das zwischen Left_click und DoubleLeftClick auf demselben Gadget unterscheidet.

Danke!

Verfasst: 05.08.2005 11:15
von bobobo
und wo ist das Problem?

Code: Alles auswählen

OpenWindow(0, 0, 0, 250, 300, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "EventType()") 

CreateGadgetList(WindowID(0)) 
ListViewGadget(0, 5, 5, 240, 250) 
For i=0 To 20 
  AddGadgetItem(0, -1, "line......"+Str(i)) 
Next 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      Break 
    Case #PB_Event_Gadget 
      Select EventGadgetID() 
        Case 0 
          Select EventType() 
            Case #PB_EventType_LeftClick : Debug "LeftClick" 
            Case #PB_EventType_LeftDoubleClick 
            MessageRequester("NANA","Nicht so heftig",0)
             Debug "LeftDoubleClick" 
          EndSelect 
      EndSelect    
  EndSelect 
ForEver 

Verfasst: 05.08.2005 11:19
von stbi
bobobo hat geschrieben:und wo ist das Problem?
Dass ich bei einem Doppelklick auch noch ein LeftClick-Event bekomme (siehe Debugger Output) :cry: ... und bei LeftClick soll mein Programm eben was anderes machen als beim Doppelklick.

Verfasst: 05.08.2005 11:19
von Batze
Du must dann aber natürlich einen kleinen Verzögerungsramen erstellen, damit du noch das alte Leftklick ignorieren kannst, wenn danach ein Leftdoubleklick kommt. Sonst hast du beides. :wink:

Edit: Oh du warst schneller

Verfasst: 05.08.2005 11:30
von stbi
Batze hat geschrieben:Du must dann aber natürlich einen kleinen Verzögerungsramen erstellen, damit du noch das alte Leftklick ignorieren kannst, wenn danach ein Leftdoubleklick kommt. Sonst hast du beides. :wink:
Wie meinst Du das? Bei einem LeftClick noch schauen, ob ein LeftDoubleClick hinterherkommt? Hab ich probiert, kommt aber nur noch der LeftClick:

Code: Alles auswählen

If EventType()  = #PB_EventType_LeftClick 
  If EventType() = #PB_EventType_LeftDoubleClick
    Debug "LeftDoubleClick"
  Else
    Debug "LeftClick"
  EndIf  
EndIf

Verfasst: 05.08.2005 11:33
von Batze
So funktionierts bei mir, aber es gibt ja vielleicht noch eine praktischere Lösung.

Code: Alles auswählen

OpenWindow(0, 0, 0, 250, 300, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "EventType()")

CreateGadgetList(WindowID(0))
ListViewGadget(0, 5, 5, 240, 250)
For i=0 To 20
  AddGadgetItem(0, -1, "line......"+Str(i))
Next
LK = -1

Repeat
  If LK = -1
    event = WaitWindowEvent()
  Else
    event = WindowEvent()
    Delay(10)
  EndIf
  Select event
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case 0
          Select EventType()
            Case #PB_EventType_LeftClick : LK = ElapsedMilliseconds()
            Case #PB_EventType_LeftDoubleClick
              LK = -1
              MessageRequester("NANA","Nicht so heftig",0)
              Debug "LeftDoubleClick"
          EndSelect
      EndSelect   
  EndSelect
  If LK <> -1 And LK+300 < ElapsedMilliseconds()
    Debug "Leftklick"
    LK = -1
  EndIf
ForEver

Verfasst: 05.08.2005 14:05
von stbi
Hallo Batze, danke, das ist eine Möglichkeit. :allright: Funktioniert im Testprogramm auch super, nur wenn ich es ins echte Programm übernehme, wo im Eventloop noch ein paar andere Sachen passieren, dann gehts auch nicht mehr richtig. :?

Ich habe nebenbei noch etwas mit VB6 gespielt - selbes Problem, einfache und doppelte Klicks auseinanderzuhalten.

Hat noch niemand dieses Problem gehabt?

Verfasst: 05.08.2005 14:24
von Kiffi
> Hat noch niemand dieses Problem gehabt?

das Hauptproblem ist, dass das Programm nicht wissen kann, dass ein
Doppelklick kommen wird. Aus diesem Grund wird es den ersten Klick eines
Doppelklicks immer als Einfachklick interpretieren.

Grüße ... Kiffi

Verfasst: 05.08.2005 14:47
von Batze
Wieso funktioniert das nur im Testprogramm?
Das sollte mit Modifikationen eigentlich immer gehen. :?

Verfasst: 05.08.2005 15:01
von stbi
Batze, das war keine Kritik an Deinem Programm, das funktioniert ja! :praise:

Aber ich mache im Eventloop noch diverse andere Sachen, es funktioniert damit einfach nicht mehr so wie im Testprogramm. Muss mal sehen, ob ich den Eventloop umbauen und die anderen Sachen in Threads auslagern kann, dass ich auf WaitWindowEvent umstellen kann. :coderselixir:

Its not a bug its a feature, ich weiß. >_< Aber ich bin trotzdem völlig genervt ... am Ende ... unruhig ... verzweifelt ... :freak: