Seite 2 von 3

Verfasst: 31.05.2007 05:52
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

Verfasst: 31.05.2007 10:51
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

Verfasst: 31.05.2007 11:06
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...

Verfasst: 31.05.2007 11:10
von ts-soft
Alle meine elektr. Geräte haben auch nur Einfach-Drück Knöpfe :mrgreen:

Verfasst: 31.05.2007 11:14
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.

Verfasst: 31.05.2007 12:13
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

Verfasst: 31.05.2007 12:23
von Kaeru Gaman
DANN PROBIERS DOCH AUS!

Verfasst: 31.05.2007 12:38
von mueckerich
AAAAAAAAAAAAAAAAAAUUUUUUUUUUUUUUUU!
Schrei nicht so laut, da tun mir doch gleich die Ohren weh. :wink:

Verfasst: 31.05.2007 12:45
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

Verfasst: 31.05.2007 14:31
von PureBasic4.0
Danke, der Code von jear funktioniert.

Vom Gebrüll von Kaeru tun mrir jetzt noch die Ohren weh ;-)