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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message par Kwai chang caine »

Joliiiiiiii !!!! Merci pour ce code 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

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

Message 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 :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre