Page 1 sur 1

Boutons Image trois états (Normal\Hover\Actif)

Publié : ven. 22/avr./2011 18:51
par falsam

Code : Tout sélectionner

;Bouton 3 etats
;

EnableExplicit
;Un gadget est il survolé (Joli macro hein ?"
Macro GadgetHoverCheck(x, y, Gadget)
  (((Not x<GadgetX(Gadget)) & (Not y<GadgetY(Gadget))) &(Not x>=(GadgetX(Gadget)+GadgetWidth(Gadget))) & (Not y>=(GadgetY(Gadget)+GadgetHeight(gadget))))
EndMacro
  
Enumeration  
  #MainForm
  
  #ButtonImage1 ;Bouton Image 1
  #ButtonImage2 ;Bouton Image 2
  #ButtonImage3 ;Bouton Image 2
  
  #ImageState_Normal ;Image etat normal
  #ImageState_Hover ;Image etat Survolé
  #ImageState_Click ;Image etat Cliqué
EndEnumeration

Global Click.i, WinMouseX.i, WinMouseY.i

Procedure InitResource()
  ;Chargement de l'image
  LoadImage(#ImageState_Normal , "CmState1.bmp")
  LoadImage(#ImageState_Hover , "CmState2.bmp")
  LoadImage(#ImageState_Click , "CmState3.bmp")
EndProcedure

;Il y a t'il un bouton survolé
Procedure GetButtonHover()
  WinMouseX = WindowMouseX(#mainform)
  WinMouseY = WindowMouseY(#mainform)
  
  If Click<>1
    If GadgetHoverCheck(WinMouseX, WinMouseY, #ButtonImage1) 
      SetGadgetState(#ButtonImage1, ImageID(#ImageState_Hover))
    Else 
      SetGadgetState(#ButtonImage1, ImageID(#ImageState_Normal))
    EndIf
  EndIf
  
  If Click<>2
    If GadgetHoverCheck(WinMouseX, WinMouseY, #ButtonImage2)
      SetGadgetState(#ButtonImage2, ImageID(#ImageState_Hover))  
    Else
      SetGadgetState(#ButtonImage2, ImageID(#ImageState_Normal))  
    EndIf
  EndIf
  
  If Click<>3
    If GadgetHoverCheck(WinMouseX, WinMouseY, #ButtonImage3)
      SetGadgetState(#ButtonImage3, ImageID(#ImageState_Hover))  
    Else 
      SetGadgetState(#ButtonImage3, ImageID(#ImageState_Normal))
    EndIf
  EndIf  
EndProcedure

;Affichage de notre fenetre 
Procedure MainFormShow()
  OpenWindow(#MainForm,0,0,500,300,"Bouton Images",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
  ImageGadget(#ButtonImage1,10,20,106,32, ImageID(#ImageState_Normal))
  ImageGadget(#ButtonImage2,120,20,106,32, ImageID(#ImageState_Normal))
  ImageGadget(#ButtonImage3,230,20,106,32, ImageID(#ImageState_Normal))
EndProcedure
  
InitResource()  
MainFormShow()
  
Repeat  
  GetButtonHover()
  Select WaitWindowEvent()     
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #ButtonImage1
          Click=1
          SetGadgetState(#ButtonImage1, ImageID(#ImageState_Click))
          Debug "Bouton 1"
          
        Case #ButtonImage2
          Click=2
          SetGadgetState(#ButtonImage2, ImageID(#ImageState_Click))
          Debug "Bouton 2"
          
        Case #ButtonImage3
          Click=3
          SetGadgetState(#ButtonImage3, ImageID(#ImageState_Click))
          Debug "Bouton 3"
      EndSelect       
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Codes et images exemples en cliquant sur ce lien (Format Zip)

Re: Boutons Image trois états (Normal\Hover\Actif)

Publié : sam. 23/avr./2011 8:07
par Kwai chang caine
Joliiiiiiii !!!! Merci pour ce code 8)

Re: Boutons Image trois états (Normal\Hover\Actif)

Publié : sam. 23/avr./2011 13:05
par dayvid
Ouais pas mal :)

Et Falsam toi qui m'as l'air un peut caller :)

Tu saurais reproduire un comportement de bouton identique
a Windows :D ( voir même mieux encore) ainsi que tous les évènement de souris lier ?

En tous qu'a la c'est un bon début :)

Tu te rappel que j'avais commencer un truc comme sa
c'étais pas mal hein mais j'ai pas eu la force de continuer :(

Voici les étas: les plus important étans le bouton droit et le gauche de la souris:

1: souris pas sur bouton et aucun clique
2: souris sur bouton et aucun clique (sélection)
3: souris sur bouton et bouton gauche enfoncer (pas relâcher)*
4: souris sur bouton et bouton gauche relâcher, êtas revient a 2

etc: Idem pour le bouton gauche et la roulette

* Si ont appuie sur le bouton gauche de la souris en dehors du bouton
et que on ramène la souris sur le bouton (toujours bouton gauche appuyer)
il doit se produire un autre êtas, exemple, le bouton devient rouge

En tous qu'a bon boulot a toi :)