Couleur de fond pour "TrackBarGadget"
Couleur de fond pour "TrackBarGadget"
Bonjour à tous,
L'utilisation du gadget "TrackBarGadget" sur une fenêtre dont le couleur de fond n'est pas #D4D0C8 affiche un pavé gris sous le gadget de la taille définie lors de l'appel du gadget.
Est il possible de changer la couleur de fond de ce gadget ?
J'ai remarqué le même problème avec les boutons bande de 1px autour de la forme)
Merci pour toute suggestion
Aliass
L'utilisation du gadget "TrackBarGadget" sur une fenêtre dont le couleur de fond n'est pas #D4D0C8 affiche un pavé gris sous le gadget de la taille définie lors de l'appel du gadget.
Est il possible de changer la couleur de fond de ce gadget ?
J'ai remarqué le même problème avec les boutons bande de 1px autour de la forme)
Merci pour toute suggestion
Aliass
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Couleur de fond pour "TrackBarGadget"
Sous windows uniquement (Code de Sparkie forum anglais)
Code : Tout sélectionner
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_CTLCOLORSTATIC
result = GetGadgetData(1)
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 320, 240, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
SetWindowColor(0, #Red)
TrackBarGadget(1, 10, 10, 300, 30, 0, 25, #PB_TrackBar_Ticks)
winColor = GetWindowColor(0)
If winColor <> -1
hBrush = CreateSolidBrush_(winColor)
If hBrush
SetGadgetData(1, hBrush)
SetWindowCallback(@WinCallback())
EndIf
EndIf
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
If hBrush
DeleteObject_(hBrush)
EndIf
EndIf
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Couleur de fond pour "TrackBarGadget"
Super, c'est exactement ce que je cherche comme résultat.
Je vais étudier le code...
Merci
Je vais étudier le code...
Merci
Re: Couleur de fond pour "TrackBarGadget"
Bon alors là je comprends pas comment ça marche
Plusieurs questions me viennent à l'esprit.
- D’où sort cette fonction CreateSolidBrush_() ? (J'ai cherché dans la doc et j'ai rien trouvé).
- Pourquoi un GetGadgetData() effectue le changement de la couleur et pourquoi, pour que cela fonctionne, doit il être effectué dans une fonction "CallBack" ?
- Comment faire pour passer un paramètre à la fonction CallBack ? (Plusieurs objets dont il faut modifier la couleur de fond).
Bref, merci Falsam pour tes lumières mais actuellement j'ai le phare dans les yeux et je n'y vois rien...
Aliass

Plusieurs questions me viennent à l'esprit.
- D’où sort cette fonction CreateSolidBrush_() ? (J'ai cherché dans la doc et j'ai rien trouvé).
- Pourquoi un GetGadgetData() effectue le changement de la couleur et pourquoi, pour que cela fonctionne, doit il être effectué dans une fonction "CallBack" ?
- Comment faire pour passer un paramètre à la fonction CallBack ? (Plusieurs objets dont il faut modifier la couleur de fond).
Bref, merci Falsam pour tes lumières mais actuellement j'ai le phare dans les yeux et je n'y vois rien...

Aliass
- Mindphazer
- Messages : 694
- Inscription : mer. 24/août/2005 10:42
Re: Couleur de fond pour "TrackBarGadget"
CreateSolidBrush_() est une API, c'est à dire une fonction spécifique du système d'exploitation (Windows en l'occurrence). C'est la raison pour laquelle ce code ne marche que sous Windows.Aliass a écrit : - D’où sort cette fonction CreateSolidBrush_() ? (J'ai cherché dans la doc et j'ai rien trouvé).
Aliass
De manière générale, toutes les fonctions se terminant par "_" sont des appels à des API, ce ne sont donc pas des fonctions de PureBasic.
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Couleur de fond pour "TrackBarGadget"
Si c'est pour du non cross platform, je t'invite aussi à regarder du coté du PureColor() Une lib de Gnozal.
Voir sur son site.
Voir sur son site.
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Couleur de fond pour "TrackBarGadget"
La réponse est donné par Mindphaser quelques réponses avant la mienne : C'est une api Microsoft. La documentation se trouve sur les différents sites de microsoft comme ce lien par exemple http://msdn.microsoft.com/fr-fr/library ... csy47.aspxAliass a écrit :D’où sort cette fonction CreateSolidBrush_() ? (J'ai cherché dans la doc et j'ai rien trouvé).
Une procedure Callback est une procedure de rappel (of course) qui sera automatiquement appelée par le système quand certains évènements se produiront sur une fenêtre.Aliass a écrit :Pourquoi un GetGadgetData() effectue le changement de la couleur et pourquoi, pour que cela fonctionne, doit il être effectué dans une fonction "CallBack" ?
La communication entre une fenêtre et le système se fait par l'intermédiaire de messages.
En purebasic, la fenêtre envoie des messages évènementiels à la procédure de callback (avec la fonction SetWindowCallback ), seuls les 4 paramètres à savoir hwnd, message, wParam et lParam sont passés.
La procédure de callback étant chargée de traiter tous les messages reçus, son corps ressemble donc la plupart du temps à ceci :
Code : Tout sélectionner
Procedure WindoWCallBack(WindowId, msg, wParam, lParam)
Debug "Je passe par le callback"
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Utilisation d'un callback",#PB_Window_SystemMenu)
SetWindowCallback(@WindowCallback()) ; active la callback
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf

ATTENTION : Une procédure de callback va te permettre de traiter les messages dont tu as l'utilité. Les autres messages ne doivent jamais être ignorés. Ces messages seront alors renvoyer à la boucle évenementielle de ton programme. C'est le rôle de la fonction ProcedureReturn #PB_ProcessPureBasicEvents.
Ci dessous un autre code tout droit sorti de l'aide que tu peux tester.
Code : Tout sélectionner
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
; Nous pouvons tester dans la callback les paramètres renseignés automatiquement par windows
If uMsg = #WM_SIZE
Select wParam
Case #SIZE_MINIMIZED
Debug "La fenêtre est minimisée"
Case #SIZE_RESTORED
Debug "La fenêtre est rétablie"
Case #SIZE_MAXIMIZED
Debug "La fenêtre est agrandie"
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowCallback(@WinCallback()) ; active la callback
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf

Joli plantage hein ?

Aliass a écrit :Comment faire pour passer un paramètre à la fonction CallBack ? (Plusieurs objets dont il faut modifier la couleur de fond).
Code : Tout sélectionner
Global WindowColor.l, BrushWindowColor.l, BrushEditBackColor.l, BrushEditFocusBackColor.l
Procedure WinCallback(WindowId, msg, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_CTLCOLORSTATIC
Select lparam
Case GadgetID(1),GadgetID(2), GadgetID(6), GadgetID(7)
result = BrushWindowColor
EndSelect
Case #WM_CTLCOLOREDIT
Select lparam
Case GadgetID(4), GadgetID(5)
If GetFocus_()=lParam
SetBkMode_(wParam, #TRANSPARENT)
SetTextColor_(wParam, $000000)
Result = BrushEditFocusBackColor
Else
SetBkMode_(wParam, #TRANSPARENT)
SetTextColor_(wParam, $000000)
Result = BrushEditBackColor
EndIf
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 640, 400, "Colorier des gadgets", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
SetWindowColor(0, RGB(221, 240, 182))
LoadFont(Police, "Tahoma", 10)
SetGadgetFont(#PB_Default, FontID(Police))
WindowColor = GetWindowColor(0)
TrackBarGadget(1, 10, 10, 300, 30, 0, 25, #PB_TrackBar_Ticks)
Frame3DGadget(2, 10, 50, 400, 200, "Frame3DGadget")
TextGadget(3, 20, 70, 80, 20, "TextGadget")
SetGadgetColor(3,#PB_Gadget_BackColor, WindowColor)
StringGadget(4, 150, 70, 200, 22, "StringGadget")
StringGadget(5, 150, 100, 200, 22, "StringGadget")
CheckBoxGadget(6, 20, 130,200, 22, "CheckBoxGadget")
OptionGadget(7, 20, 160, 200, 22, "OptionGadget")
ListIconGadget(9, 420, 50, 200, 200, "Col1", 100)
SetGadgetColor(9,#PB_Gadget_BackColor, RGB(180, 199, 141))
;CreateSolidBrush (API Microsoft)
;Initialise un pinceau avec une couleur unie spécifiée.
;http://msdn.microsoft.com/fr-fr/library/vstudio/1tycsy47.aspx
BrushWindowColor = CreateSolidBrush_(WindowColor)
BrushEditFocusBackColor = CreateSolidBrush_(RGB(223, 227, 46))
BrushEditBackColor = CreateSolidBrush_(RGB(180, 199, 141))
SetWindowCallback(@WinCallback())
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
DeleteObject_(BrushWindowColor)
DeleteObject_(BrushEditFocusBackColor)
DeleteObject_(BrushEditBackColor)
EndIf
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Mindphazer
- Messages : 694
- Inscription : mer. 24/août/2005 10:42
Re: Couleur de fond pour "TrackBarGadget"
@Falsam : joli, très joli cours sur le callback ! 

Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Re: Couleur de fond pour "TrackBarGadget"
Une nouvelle fois, MERCI falsam pour toutes ces explications.
Je vais étudier toutes ces informations et le code fourni en exemple afin de bien comprendre la "mécanique" de tout ça.
Aliass

Je vais étudier toutes ces informations et le code fourni en exemple afin de bien comprendre la "mécanique" de tout ça.
Aliass
Re: Couleur de fond pour "TrackBarGadget"
@falsam
+1 Ton cours sur le calbar,heu! je voulais dire Callback servira j'en suis sur a beaucoup de monde.

+1 Ton cours sur le calbar,heu! je voulais dire Callback servira j'en suis sur a beaucoup de monde.

