Unterscheidung LeftClick und LeftDoubleClick bei EventType()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Unterscheidung LeftClick und LeftDoubleClick bei EventType()

Beitrag 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!
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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 
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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?
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Wieso funktioniert das nur im Testprogramm?
Das sollte mit Modifikationen eigentlich immer gehen. :?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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:
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Antworten