Illustration BindEvent et BindEventGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Illustration BindEvent et BindEventGadget

Message par Mesa »

Dans le post précédent "Rester appuyé sur bouton gauche", la solution trouvée par falsam me paraît un bon exemple d'illustration des fonctions BindEvent et BindEventGadget pour la doc.

Je vais peut être mettre l'exemple ci dessous dans le dossier "Example" de PB.

Pouvez-vous me dire si l'exemple fonctionne bien.
Comme d'habitude merci d'indiquer votre OS.

Code : Tout sélectionner

; Let's create a speedButton which produce event as long as it's pressed.

Global Gadget, Pressed.b, n
Global Min=-50, Max=50

; Change the speed here !
Global Delay=100 ; 100 ms


Procedure paint(canvas, state, text$)
  ; Paint canvas as fake button "+" and fake button "-"
  Protected w, h
  ;State: 0     = Pushed
  ;State: Not 0 = Released
  If StartDrawing(CanvasOutput(canvas))
    Box(0,0,31,31,$CECECE) ; Gray background
    If state=0 ; UP
      LineXY(0,31,31,31,$000000)
      LineXY(31,0,31,31,$000000)
      LineXY(0,0,31,0,$FFFFFF)
      LineXY(0,0,0,31,$FFFFFF)
    Else       ;DOWN
      LineXY(0,31,31,31,$FFFFFF)
      LineXY(31,0,31,31,$FFFFFF)
      LineXY(0,0,31,0,$000000)
      LineXY(0,0,0,31,$000000)
    EndIf
    w=TextWidth(text$)
    h=TextHeight(text$)
    DrawText(16-w/2, 16-h/2, Text$, $000000, $CECECE)
    
    StopDrawing()
  EndIf
  
EndProcedure

Procedure OnSpeedButtonEvent()
  ; Bind all button "-" events and all button "+" events
  Gadget = EventGadget()
  
  Select EventType() ; Which event ?
    Case #PB_EventType_MouseEnter
      If Gadget=0
        Debug "Enter button -"
      ElseIf Gadget=1
        Debug "Enter button +" 
      EndIf      
      
    Case #PB_EventType_MouseLeave
      If Gadget=0
        Debug "Leave button -"
      ElseIf Gadget=1
        Debug "Leave button +" 
      EndIf  
      
    ; Each time a button is left clicked  
    Case #PB_EventType_LeftButtonDown
      Pressed = #True
      
      Select Gadget
        Case 0 ; Button "-"
          paint(0,1,"-") ; Paint the button "-" pushed
        Case 1 ; Button "+"
          paint(1,1,"+") ; Paint the button "+" pushed
      EndSelect
      
    Case #PB_EventType_LeftButtonUp
      Pressed = #False
      paint(0,0,"-")     ; Paint the button "-" released
      paint(1,0,"+")     ; Paint the button "+" released
      
  EndSelect
EndProcedure

Procedure OnTimer()
  If Pressed ; Each time a button is left clicked and as long as it's clicked
    Select Gadget
      Case 0 ; Button "-"  
        If n>Min
         n-1 
         SetGadgetState(2, GetGadgetState(2)-1) ; ProgressBar down        
        EndIf
        
      Case 1 ; Button "+"      
        If n<Max
         n+1 
         SetGadgetState(2, GetGadgetState(2)+1) ; ProgressBar up	
        EndIf
    EndSelect    
    
    SetGadgetText(3, Str(n))
  EndIf
EndProcedure

; Open a window with some gadgets
OpenWindow(0, 0, 0, 400, 100, "Clic a looooong time please on +/- ;)", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 30, 32, 32)        ; Fake button -
CanvasGadget(1, 400-32-10, 30, 32, 32) ; Fake button +
paint(0,0,"-")
paint(1,0,"+")
ProgressBarGadget(2,52,30,296,32,Min,Max,#PB_ProgressBar_Smooth)
TextGadget(3, 190, 35, 22, 22, "0",#PB_Text_Center)

AddWindowTimer(0, 100, Delay) ; Timer 100 ms

BindGadgetEvent(0, @OnSpeedButtonEvent()) ; Bind all button "-" events
BindGadgetEvent(1, @OnSpeedButtonEvent()) ; Bind all button "+" events
BindEvent(#PB_Event_Timer, @OnTimer())    ; Bind the timer event

Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
M.
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Re: Illustration BindEvent et BindEventGadget

Message par kwandjeen »

PB 5.31 (32bits)
Windows 7 pro 64 bits

Les boutons fonctionnent bien.
Juste un bug sur le rafraîchissement du texte au milieu mais dû au fait que windows n'aime pas la superposition de gadget il me semble.

++
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Illustration BindEvent et BindEventGadget

Message par Marc56 »

PB 5.31 x64 et x32 / Windows 8.1 x64

Fonctionne bien sauf deux bugs:
- Le % clignote.
- En mode + la barre de progression continue à avancer pendant 2 secondes après relâche du bouton souris.

Sinon, très joli.
:wink:
Répondre