Doppelklick auf Button?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Mit Subclassing kann man die Events dennoch abfragen :

(Benoetigt aktuelles PBOSL)

Code: Alles auswählen

Procedure _subclass_cb_(hWnd,uMsg,wParam,lParam,uId,uData)
  
  If uMsg = #WM_LBUTTONDBLCLK
    Debug "LBUTTONDBLCLK"
  EndIf
  
  If uMsg = #WM_LBUTTONDOWN
    Debug "LBUTTONDOWN"
  EndIf
  
  If uMsg = #WM_LBUTTONUP
    Debug "LBUTTONUP"
  EndIf
  
  If uMsg = #WM_RBUTTONDBLCLK
    Debug "RBUTTONDBLCLK"
  EndIf
  
  If uMsg = #WM_RBUTTONDOWN
    Debug "RBUTTONDOWN"
  EndIf
  
  If uMsg = #WM_RBUTTONUP
    Debug "RBUTTONUP"
  EndIf
  
  If uMsg = #WM_MBUTTONDBLCLK
    Debug "MBUTTONDBLCLK"
  EndIf
  
  If uMsg = #WM_MBUTTONDOWN
    Debug "MBUTTONDOWN"
  EndIf
  
  If uMsg = #WM_MBUTTONUP
    Debug "MBUTTONUP"
  EndIf
  
  ProcedureReturn DefSubclassProc(hWnd,uMsg,wParam,lParam)
EndProcedure


OpenWindow(0,200,200,200,200,"test")
CreateGadgetList(WindowID(0))
ButtonGadget(0,10,10,180,180,"test")

SetWindowSubclass(GadgetID(0),@_subclass_cb_(),0)


Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

warum wird der Doppelklick auf dem Button nicht unterstützt? Das ist unlogisch hoch 3.

Kurz und knapp: Ich muss doch einen Timer machen, oder? Weil extra den API-Code von edel durchzukauen ist mir dann doch etwas zu kompliziert
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> warum wird der Doppelklick auf dem Button nicht unterstützt? Das ist unlogisch hoch 3.

im gegenteil.

der Button hat nativ nur eine Einfach-Click funktion, von Windows aus.
in keiner programmiersprache auf windows gibt es native unterstützung für doppelklick auf buttons...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Alle meine elektr. Geräte haben auch nur Einfach-Drück Knöpfe :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo eben. was macht ne waschmaschine beim doppelklick... die trommel vergrößern?

bei nem Button mit Doppelclick-funktion musst du dabeischreiben, dass der eine hat, sonst kommt doch keiner drauf.


> Weil extra den API-Code von edel durchzukauen ist mir dann doch etwas zu kompliziert

nu, da is doch grad ma ganix kompliziert...
du braust nur die funktion aus der PBOSL, die dir erleichtert, ne subclass zu erzeugen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

kann man nicht einfach sowas hier machen?:

Code: Alles auswählen

ElseIf GadgetID = #Button_0
  If EventType() = #PB_EventType_LeftDoubleClick
    ; Funktion bei Doppelklick
  ElseIf EventType() = #PB_EventType_LeftClick
    ; Funktion bei einfach klick
  EndIf
  
Funktioniert sowas
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

DANN PROBIERS DOCH AUS!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

AAAAAAAAAAAAAAAAAAUUUUUUUUUUUUUUUU!
Schrei nicht so laut, da tun mir doch gleich die Ohren weh. :wink:
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Wenn man denn unbedingt den Doppelklick braucht, ist das doch auch mit Zeitabfrage nicht kompliziert...

Code: Alles auswählen

OpenWindow(0,200,200,200,200,"test") 
CreateGadgetList(WindowID(0)) 
ButtonGadget(0,10,10,180,180,"test") 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      quit=1 
    Case #PB_Event_Gadget  
      If EventGadget() = 0 
        Select EventType() 
          Case #PB_EventType_RightClick 
            Debug "rechts " + Str(ix)
          Case #PB_EventType_LeftClick 
            ;Debug "links "  + Str(ix)
            time = ElapsedMilliseconds()
            If (time - lasttime) < 500 ; ms
              ix + 1 : Debug "Doppelklick "  + Str(ix)
            Else 
              lasttime = time
            EndIf
          Case #PB_EventType_RightDoubleClick 
            Debug "rechts doppel "  + Str(ix)
          Case #PB_EventType_LeftDoubleClick 
            Debug "links doppel "  + Str(ix)
        EndSelect 
      EndIf 
  EndSelect 
Until quit 
End
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke, der Code von jear funktioniert.

Vom Gebrüll von Kaeru tun mrir jetzt noch die Ohren weh ;-)
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten