CheckBoxGadget et Couleurs [resolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

CheckBoxGadget et Couleurs [resolu]

Message par PCPixMusic »

Bonjour,

Après des heures de recherche, je ne trouve pas comment faire pour changer la couleur de fond et d'écriture avec CheckBoxGadget.

En effet, un code comme celui-ci ne fonctionne pas :

Code : Tout sélectionner

SetGadgetColor(#CheckBox, #PB_Gadget_BackColor,RGB(150,150,150)) ;Couleur de fond du text
SetGadgetColor(#CheckBox, #PB_Gadget_FrontColor, RGB(255, 255, 255)) ;Couleur du text
Merci à la personne qui connaîtra la réponse. :D
Dernière modification par PCPixMusic le ven. 28/avr./2017 1:22, modifié 1 fois.
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: CheckBoxGadget et Couleurs

Message par PCPixMusic »

Bonjour,

Merci beaucoup pour votre réponse.Cependant, c'est vraiment très compliqué et je ne comprends rien aux codes en exemple.

J'observe :

Code : Tout sélectionner

SetBkMode_(wParam,#TRANSPARENT)
SetTextColor_(wParam, Textcolor)


Es que ça ne serait pas possible de mettre celà directement après un CheckBoxGadget ?

Code : Tout sélectionner

SetWindowCallback(@WindowProc())
==> A quel moment les couleurs de fond et du text sont paramétrés ?

Es que ce n'est pas possible de faire une procedure du genre CheckGadgetColor(#Identifiant, Couleur_de_fond, Couleur_de_text) ?

Voici le code en question (merci à mon ami de switchsoft.fr pour sa WebApplication super pratique) :

http://paste.switchsoft.fr/pqusdutxp

C'est vraiment dommage qu'il n'y a pas de vraie fonction comme en turbo pascal, car j'ai encore du mal avec le concept de ProcedureReturn, même si Return existe dans beaucoup de langage, ça ne me parle pas aussi bien qu'une vraie fonction. Je trouve que c'est quelque chose qui manque vraiment à ce langage, qui est un Visual Basic Pascaliser. :mrgreen:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: CheckBoxGadget et Couleurs

Message par Ar-S »

Pure basic est un langage crossplateform, c'est pour cela que tu ne trouve pas en natif les instructions qui pourraient paraitre logique de voir.
Pour palier à ce manque, PB permet tout de même d'utiliser les API des OS. Lorsque tu vois une commande avec un tiret comme
SetTextColor_ c'est une commande windows et pas purebasic. Il faut donc respecter la syntaxe que demande Windows à voir ici :
https://msdn.microsoft.com/fr-fr/librar ... s.85).aspx

Tu peux donc créer une procédure ou un module qui te permettra d'avoir ce CheckGadgetColor() ou autre mais qui ne sera pas cross plateforme si tu utilises des API. (ce qui n'est pas forcément gênant selon tes besoins).

Dans un des codes qu'on t'a proposé voilà la version modifiée pour les PB actuels.

Code : Tout sélectionner

;/// PROCEDURE 
Procedure myCallback(WindowID, Message, wParam, lParam)
  Shared Brush
  Result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_CTLCOLORSTATIC
      Debug "HI"
      SetBkMode_(wParam,#TRANSPARENT)
      SetTextColor_(wParam, $1111111)  ;; COULEUR DU TEXTE
      Result = Brush
  EndSelect
  ProcedureReturn Result
EndProcedure 


;// CODE

OpenWindow(0,100,150,120,40,"",#PB_Window_SystemMenu)

Brush = CreateSolidBrush_($00CCFF)  ;; COULEUR DU FOND
SetWindowCallback(@myCallback())
CheckBoxGadget(4, 10, 10,100, 20, "Test")

;--> Disable XP Theme for the OptionGadget
If OSVersion() = #PB_OS_Windows_XP
  OpenLibrary(0, "uxtheme.dll")
  CallFunction(0, "SetWindowTheme", GadgetID(4), @" ", @" ")
  CloseLibrary(0)
EndIf

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

Donc en créant une proce MyColorOptionGadget(GADGET,X, Y, L, H, message.s, COUL_FOND, COUL_TXT)
Voilà ce que ça peu donner.

Code : Tout sélectionner

;/// PROCEDURE 

Declare MyColorOptionGadget(GADGET,X, Y, L, H, message.s, COUL_FOND,COUL_TXT)

Global Brush

Procedure myCallback(WindowID, Message, wParam, lParam)
  Shared Brush
  Result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_CTLCOLORSTATIC
      Debug "HI"
      SetBkMode_(wParam,#TRANSPARENT)
      Result = Brush
  EndSelect
  ProcedureReturn Result
EndProcedure 


Procedure MyColorOptionGadget(GADGET,X, Y, L, H, message.s, COUL_FOND, COUL_TXT)
  Brush = CreateSolidBrush_(COUL_FOND)  ;; COULEUR DU FOND
  SetTextColor_(wParam, COUL_TXT)  ;; COULEUR DU TEXTE
  CheckBoxGadget(GADGET, X, Y, L, H, "Test")
    
EndProcedure



;// CODE

OpenWindow(0,100,150,120,40,"",#PB_Window_SystemMenu)


SetWindowCallback(@myCallback())
MyColorOptionGadget(4, 10, 10,100, 20, "Test", $00CCFF, $111111)

;--> Disable XP Theme for the OptionGadget
If OSVersion() = #PB_OS_Windows_XP
  OpenLibrary(0, "uxtheme.dll")
  CallFunction(0, "SetWindowTheme", GadgetID(4), @" ", @" ")
  CloseLibrary(0)
EndIf

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
~~~~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
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: CheckBoxGadget et Couleurs

Message par PCPixMusic »

Waou, merci beaucoup , ça marche nukel ! :D

Pour ma part j'ai écrit comme ceci :

Code : Tout sélectionner

Procedure CheckBoxColorGadget(GADGET,X, Y, L, H, message.s, COUL_FOND, COUL_TXT)
  SetWindowCallback(@myCallback())
  Brush = CreateSolidBrush_(COUL_FOND)  ;; COULEUR DU FOND
  SetTextColor_(wParam, COUL_TXT)  ;; COULEUR DU TEXTE
  CheckBoxGadget(GADGET, X, Y, L, H,message)  
EndProcedure
Je n'ai qu'à ajouter le mot Color dans le gadget les deux couleurs pour une modification rapide avec la fonction remplacer de l'éditeur :

Code : Tout sélectionner

CheckBoxColorGadget(#CheckBox_0, 16,130,100, 15, "Presse",RGB(150,150,150),RGB(255,255,255)):SetGadgetState(#CheckBox_0, CheckBox_0)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: CheckBoxGadget et Couleurs

Message par Ar-S »

L'avantage des procédures est que tu les arranges ta sauce ;)
Tu peux éditer ton 1er message et ajouter [resolu] devant le titre.
~~~~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
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: CheckBoxGadget et Couleurs

Message par PCPixMusic »

[resolu] fait. :lol: 8)

Exactement et c'est cette pascalification de PureBasic qui lui donne cette force.

Je regrette encore une fois que function n'existe pas, afin d'avoir des vraies fonctions sans avoir à utiliser des moyens détournés par ProcedureReturn (comme dans beaucoup de langage avec Return), ce qui serait beaucoup plus simple à écrire. :mrgreen:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: CheckBoxGadget et Couleurs [resolu]

Message par falsam »

Function ou Procedure c'est la même chose et c'est aussi rapide à écrire. Par contre ProcedureReturn c'est plus long que Return !!
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: CheckBoxGadget et Couleurs [resolu]

Message par Kwai chang caine »

Cette fonction n'existe pas parce que CROSOFT ne l'a pas prévu avec une API contrairement aux autres gadgets ..., c'est pourquoi FRED n'a pas créé la fonction nativement.
C'est vrai quel serait le dégénéré qui voudrait colorier un bouton, check, etc... :lol:

Il faut donc faire le boulot de BILOU, mettre les mains dans le cambouis, et utiliser les callback qui sont bas niveau
Ce qui alourdit considérablement le code, et complique la vie des débutants, car la callback c'est pas une partie de plaisir à comprendre :?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: CheckBoxGadget et Couleurs [resolu]

Message par Ar-S »

Et encore... Avec un peu de macro :mrgreen:

Code : Tout sélectionner

Macro Function
  Procedure
  EndMacro
  
  Macro Retour
    ProcedureReturn
  EndMacro
  
  Macro Fin 
    EndProcedure
  EndMacro
  
  Function Affiche(message.s)
  Debug message.s
  Retour 
  Fin
    
  Affiche ("coucou")
~~~~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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: CheckBoxGadget et Couleurs [resolu]

Message par Kwai chang caine »

Surtout que le poisson..c'est bon pour le cerveau, et y'en faut un costaud pour maitriser à donf cette fonction
Je me demande si la MACRO, c'est pas la soeur de la Callback :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: CheckBoxGadget et Couleurs

Message par Marc56 »

PCPixMusic a écrit : Je regrette encore une fois que function n'existe pas, afin d'avoir des vraies fonctions sans avoir à utiliser des moyens détournés par ProcedureReturn (comme dans beaucoup de langage avec Return), ce qui serait beaucoup plus simple à écrire. :mrgreen:
La différence function/procedure n'existe qu'en Pascal.
Pour tous les autres langages, il n'y a que des fonctions et qui retournent ou pas un résultat.
PB utilise le mot clé Procedure, et cela trompe souvent ceux qui découvrent ce langage en venant du Pascal/Delphi.

Et les fonctions sont quand même bien plus rapides à écrire en PB qu'en Pascal :wink:
(pas besoin de réécrire le nom de la fonction en sortie: juste le résultat derrière ProcedureReturn)

Code : Tout sélectionner

; https://fr.wikibooks.org/wiki/Programmation_Pascal/Proc%C3%A9dures_et_fonctions
; Fonction en Pascal
; function NumeroPlusCinq( numero : integer ) : integer ;
;    var j : integer;
; begin
;    j := numero + 5 ;
;    NumeroPlusCinq := j ;
; End      
;

; Fonction en PB
; Version longue, sécurisée en mode EnableExplicit
; Procedure NumeroPlusCinq(numero.i)
;      Protected j.i
;      j = numero + 5
;      ProcedureReturn j
; EndProcedure


; Version courte (par défaut en PB variable numérique sans spécification = integer)
Procedure NumeroPlusCinq(numero)
     ProcedureReturn numero + 5
EndProcedure


Debug NumeroPlusCinq(2)
Bon d'accord, il faut écrire des mots clé plus longs, mais la complétion est là: Taper pro puis tab 2 fois donne

Code : Tout sélectionner

Procedure EndProcedure
et le curseur reste à attendre entre les deux mot-clé.


:wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: CheckBoxGadget et Couleurs [resolu]

Message par Kwai chang caine »

Cool le coup du double tab, il me semblait bien avoir vu passer cette nouvelle fonction de l'autocompletion il y a quelque temps mais je savais pas comment l'activer :oops:
Alors "merki" 8)
La différence function/procedure n'existe qu'en Pascal.
Pas tout à fait mon bon Marc
Tu oublies ce bon vieux VB, ou il existe les SUB et les FONCTIONS
La première ne permettant pas contrairement à la seconde d'utiliser un return et donc de retourner un résultat :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre