SetButtonColor - Réglage des couleurs d'un bouton

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
François
Messages : 26
Inscription : mar. 14/juin/2016 12:31

SetButtonColor - Réglage des couleurs d'un bouton

Message 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 >
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

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

Message par Shadow »

Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
François
Messages : 26
Inscription : mar. 14/juin/2016 12:31

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

Message par François »

@Shadow : trop beaux tes boutons. Trop fort ! Bravo.
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

C'est réactif, c'est coloré, c'est fonctionnel. Bien joué ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

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

Message par Marc56 »

Du code propre et net comme on voudrait en voir plus souvent.

Bravo François 8)
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

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

Message par Shadow »

Merci François :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message par Kwai chang caine »

Marche nickel
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre