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 >