Page 1 sur 1

SetButtonColor - Réglage des couleurs d'un bouton

Publié : jeu. 06/juil./2017 12:59
par François
Bonjour,

Après quelques déboires pour ajuster les couleurs d'un bouton et avec l'aide de Zorro, Ar-S, Marc56 et des forums, je suis parvenu a écrire une procédure qui permet le réglage dynamique des couleurs du texte et du fond d'un bouton (un ButtonImageGadget pour être plus précis). La fonction est assez robuste, du moins après les tests que je lui ai fait subir.

Le code de départ a été proposé par Zorro mais il posait quelques problèmes quand on réalise l'interface avec le Form Designer d'où cette nouvelle procédure.
http://www.purebasic.fr/french/viewtopi ... uttoncolor

Je souhaitais donc partager cette modeste contribution.

Code : Tout sélectionner

;=======================================================================:
;  ===================================================================  :
;  ===          EXEMPLE DE REGLAGE DE COULEUR D'UN BOUTON          ===  :
;  ===================================================================  :
;                                                                       :
;   Dans cet exemple, on utilise la fonction "SetButtonColor" pour      :
;   régler les couleurs du texte et du fond d'un "ButtonImageGadget".   :
;   Deux boutons sont créés selon deux méthodes différentes :           :
;      - la première en utilisant #PB_Any,                              :
;      - la deuxième en utiisant une constante.                         :
;   L'action sur le premier bouton change les couleurs de façon         :
;   aléatoire.                                                          :
;                                                                       :
;   Fonctionne aussi si l'interface est créée avec le Form Designer.    :
;                                                                       :
;   Réalisé à partir d'un code écrit il y a fort longtemps par Zorro    :
;   et avec les aides de Marc56 et Ar-S.                                :
;   François (Jim Croce - The Definitive Croce) - Juillet 2017          :
;   PureBasic 5.42 LTS (Windows - x64)                                  :
;=======================================================================:

Global btnI_B1                 ; Variable globale pour le premier bouton.
Enumeration
    #btnI_B2                        ; Constante pour lde deuxième bouton.
EndEnumeration

;-----------------------------------------------------------------------:
;            --------------------------------------------               :
;            ---            SetButtonColor            ---               :
;            --------------------------------------------               :
;                                                                       :
;   FONCTION : change les couleurs du texte et du fond d'un bouton.     :
;   ----------                                                          :
;                                                                       :
;   SYNTAXE : SetButtonColor(idBtn, FrtColor, BkgColor)                 :
;   ---------                                                           :
;       avec : - idBtn l'identifiant du bouton,                         :
;              - FrtColor la couleur du texte,                          :
;              - BkgColor la couleur du fond.                           :
;       Le bouton doit être un "ButtonImageGadget".                     :
;                                                                       :
;-----------------------------------------------------------------------:
Procedure SetButtonColor(idBtn, FrtColor, BkgColor)
;-----------------------------------------------------:
;       Récupération des caractériqtiques du bouton   :
;-----------------------------------------------------:
    Text.s = GetGadgetText(idBtn)
    L = GadgetWidth(idBtn)
    H = GadgetHeight(idBtn)
    x = GadgetX(idBtn)
    y = GadgetY(idBtn)
    
;---------------------------------------:
;       Création de l'image du bouton   :
;---------------------------------------:    
    idImg = CreateImage(#PB_Any, L, H, 32, BkgColor)
    StartDrawing(ImageOutput(idImg))
        Box(x, y, L, H, BkgColor)
        FrontColor(FrtColor)
        BackColor(BkgColor)
        DrawText((L - TextWidth(Text))/2, (H - TextHeight(Text)) / 2, Text, FrtColor, BkgColor)
    StopDrawing()

;-------------------------------------------:
;       Maise à jour de l'image du bouton   :
;-------------------------------------------:    
    SetGadgetAttribute(idBtn, #PB_Button_Image, ImageID(idImg))
    
EndProcedure ; ------------------< Fin de la procédure "SetButtonColor" >

;==========================================================================:
;              ===         PROGRAMME PRINCIPAL          ===                :
;==========================================================================:
If OpenWindow(#PB_Any, 0, 0, 240, 150, "SetButtonColor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

;--------------------------------------------------------------------------:
;        ---         Création du bouton avec "#PB_Any"         ---         :
;--------------------------------------------------------------------------:
    btnI_B1 = ButtonImageGadget(#PB_Any, 50,20,130,40, 0)
    SetGadgetText(btnI_B1, "Bouton 1")                      ; Texte du bouton
    SetButtonColor(btnI_B1, $FFFFFF, RGB(65,114,173))       ; Réglage de la couleur.
    
;--------------------------------------------------------------------------:
;      ---         Création du bouton avec une constante         ---       :
;--------------------------------------------------------------------------:
    ButtonImageGadget(#btnI_B2, 50,80,130,40, 0)
    SetGadgetText(#btnI_B2, "Bouton 2")                      ; Texte du bouton
    SetButtonColor(#btnI_B2, $FFFFFF, RGB(28,94,62))       ; Réglage de la couleur.
    
;--------------------------------------------------------------------------:
;              ---         Gestion des évènements         ---              :
;--------------------------------------------------------------------------:
Repeat
     Event = WaitWindowEvent()
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case btnI_B1
                SetButtonColor(btnI_B1, RGB(Random(255), Random(255), Random(255)),RGB(Random(255), Random(255), Random(255)))   
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf
; ------------------------------------------------------< FIN DU PROGRAMME >

Re: SetButtonColor - Réglage des couleurs d'un bouton

Publié : jeu. 06/juil./2017 14:50
par Shadow

Re: SetButtonColor - Réglage des couleurs d'un bouton

Publié : jeu. 06/juil./2017 15:53
par François
@Shadow : trop beaux tes boutons. Trop fort ! Bravo.

Re: SetButtonColor - Réglage des couleurs d'un bouton

Publié : jeu. 06/juil./2017 17:04
par Ar-S
C'est réactif, c'est coloré, c'est fonctionnel. Bien joué ;)

Re: SetButtonColor - Réglage des couleurs d'un bouton

Publié : jeu. 06/juil./2017 17:14
par Marc56
Du code propre et net comme on voudrait en voir plus souvent.

Bravo François 8)

Re: SetButtonColor - Réglage des couleurs d'un bouton

Publié : ven. 07/juil./2017 4:05
par Shadow
Merci François :)

Re: SetButtonColor - Réglage des couleurs d'un bouton

Publié : lun. 10/juil./2017 17:48
par Kwai chang caine
Marche nickel
Merci du partage 8)