Page 1 sur 1

CheckBoxGadget et Couleurs [resolu]

Publié : jeu. 27/avr./2017 10:09
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

Re: CheckBoxGadget et Couleurs

Publié : jeu. 27/avr./2017 10:23
par Kwai chang caine

Re: CheckBoxGadget et Couleurs

Publié : jeu. 27/avr./2017 11:26
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:

Re: CheckBoxGadget et Couleurs

Publié : jeu. 27/avr./2017 16:16
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

Re: CheckBoxGadget et Couleurs

Publié : jeu. 27/avr./2017 18:31
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)

Re: CheckBoxGadget et Couleurs

Publié : jeu. 27/avr./2017 20:54
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.

Re: CheckBoxGadget et Couleurs

Publié : ven. 28/avr./2017 1:22
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:

Re: CheckBoxGadget et Couleurs [resolu]

Publié : ven. 28/avr./2017 16:10
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 !!

Re: CheckBoxGadget et Couleurs [resolu]

Publié : ven. 28/avr./2017 17:39
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 :?

Re: CheckBoxGadget et Couleurs [resolu]

Publié : ven. 28/avr./2017 17:42
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")

Re: CheckBoxGadget et Couleurs [resolu]

Publié : ven. 28/avr./2017 17:48
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:

Re: CheckBoxGadget et Couleurs

Publié : sam. 29/avr./2017 8:11
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:

Re: CheckBoxGadget et Couleurs [resolu]

Publié : sam. 29/avr./2017 15:42
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: