Page 1 sur 1

Controle de la Couleur par curseur RVB

Posté : mer. 29 juin 2016 12:25
par marcgforce
Bonjour,

Je me suis essayé au développement d'une interface changeant de couleur en fonction du déplacement de curseur gérant les couleurs RVB, c'est minimaliste mais fonctionnel. Je me suis inspiré comme base de départ de l'exemple de la fonction GUICtrlCreateSlider. Le code est commenté pour plus de lisibilité


[codeautoit]#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
;-------------------------------------------------------------------------------------------------
;Cet exemple permet de changer la couleur de fond d'une GUI a l'aide de curseurs RVB
;-------------------------------------------------------------------------------------------------
Example()

Func Example()

$gui=GUICreate("slider", 250, 150, 100, 200); création de l'interface
$couleur_gui="0x00E0FFFF" ; valeur par defaut de la couleur de l'interface
GUISetBkColor($couleur_gui) ; donne la couleur a l'interface

Local $idSlidercolor1 = GUICtrlCreateSlider(10, 10, 200, 20) ; création des curseurs de valeurs
Local $idSlidercolor2 = GUICtrlCreateSlider(10, 60, 200, 20)
Local $idSlidercolor3 = GUICtrlCreateSlider(10, 110, 200, 20)
GUICtrlCreateLabel("R",220,10) ; quelques labels pour les couleurs de base
GUICtrlCreateLabel("V",220,60)
GUICtrlCreateLabel("B",220,110)
GUICtrlSetLimit($idSlidercolor1, 15, 0) ; valeur max pour les curseurs
GUICtrlSetLimit($idSlidercolor2, 15, 0)
GUICtrlSetLimit($idSlidercolor3, 15, 0)
GUISetState(@SW_SHOW) ; affichage de la fenêtre
GUICtrlSetData($idSlidercolor1, 0) ; Position du curseur au départ
GUICtrlSetData($idSlidercolor2, 0)
GUICtrlSetData($idSlidercolor3, 0)

Local $idMsg
Do ; ; Boucle tant que l'utilisateur ne quitte pas
$idMsg = GUIGetMsg() ; lecture des messages renvoyés par la gui
switch $idMsg
case $idSlidercolor1 ; si le curseur 1 est touché
$color1=GUICtrlRead($idSlidercolor1) ; on lis les valeurs des trois curseurs
$color2=GUICtrlRead($idSlidercolor2)
$color3=GUICtrlRead($idSlidercolor3)
$couleur_gui= _getcolor(_transhexa($color1),_transhexa($color2),_transhexa($color3)); transformation des valeurs curseur en hexa
guictrlsetdata($gui,GUISetBkColor($couleur_gui)); et modification de la couleur de la gui
case $idSlidercolor2
$color1=GUICtrlRead($idSlidercolor1)
$color2=GUICtrlRead($idSlidercolor2)
$color3=GUICtrlRead($idSlidercolor3)
$couleur_gui= _getcolor(_transhexa($color1),_transhexa($color2),_transhexa($color3))
guictrlsetdata($gui,GUISetBkColor($couleur_gui))
case $idSlidercolor3
$color1=GUICtrlRead($idSlidercolor1)
$color2=GUICtrlRead($idSlidercolor2)
$color3=GUICtrlRead($idSlidercolor3)
$couleur_gui= _getcolor(_transhexa($color1),_transhexa($color2),_transhexa($color3))
guictrlsetdata($gui,GUISetBkColor($couleur_gui))
EndSwitch
Until $idMsg = $GUI_EVENT_CLOSE
EndFunc

func _transhexa($n) ; fonction de transdormation des valeurs decimale en hexa
if $n=0 then return "00"
if $n=1 then return "11"
if $n=2 then return "22"
if $n=3 Then return "33"
if $n=4 then return "44"
if $n=5 then return "55"
if $n=6 then return "66"
if $n=7 then return "77"
if $n=8 then return "88"
if $n=9 then return "99"
if $n=10 then return "AA"
if $n=11 then return "BB"
if $n=12 then return "CC"
if $n=13 then return "DD"
if $n=14 then return "EE"
if $n=15 then return "FF"
EndFunc
func _getcolor($color1,$color2,$color3) ; fonction de concatenation des valeurs pour obtenir un code couleur hexa
return "0x" & $color1 & $color2 & $color3
EndFunc[/codeautoit]

En esperant que ça aide quelqu'un un jour

Re: Controle de la Couleur par curseur RVB

Posté : mer. 29 juin 2016 13:34
par orax
Bienvenue sur le forum et merci pour cet exemple. :)

Si je peux me permettre de faire quelques remarques sur le code, il pourrait être simplifié.
Les fonctions _getcolor et _transhexa pourraient être remplacées par StringFormat("0x%02X%02X%02X", $color1, $color2, $color3).
%02 va convertir le nombre décimal en hexadécimal, et un 0 sera ajouté au début si nécessaire (pour que le nombre occupe 2 chiffres).
Par contre, pour faire ça, il faudra limiter la valeur max à 255 ou 0xFF (au lieu de 15). En plus, ça permettra plus de précision dans le choix de la couleur.

[codeautoit]#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
;-------------------------------------------------------------------------------------------------
;Cet exemple permet de changer la couleur de fond d'une GUI a l'aide de curseurs RVB
;-------------------------------------------------------------------------------------------------
Example()

Func Example()

$gui = GUICreate("slider", 250, 150, 100, 200); création de l'interface
$couleur_gui = "0xE0FFFF" ; valeur par defaut de la couleur de l'interface
GUISetBkColor($couleur_gui) ; donne la couleur a l'interface

Local $idSlidercolor1 = GUICtrlCreateSlider(10, 10, 200, 20) ; création des curseurs de valeurs
Local $idSlidercolor2 = GUICtrlCreateSlider(10, 60, 200, 20)
Local $idSlidercolor3 = GUICtrlCreateSlider(10, 110, 200, 20)
GUICtrlCreateLabel("R", 220, 10) ; quelques labels pour les couleurs de base
GUICtrlCreateLabel("V", 220, 60)
GUICtrlCreateLabel("B", 220, 110)
GUICtrlSetLimit($idSlidercolor1, 0xFF, 0) ; valeur max pour les curseurs (0xFF = 255)
GUICtrlSetLimit($idSlidercolor2, 0xFF, 0)
GUICtrlSetLimit($idSlidercolor3, 0xFF, 0)
GUISetState(@SW_SHOW) ; affichage de la fenêtre
GUICtrlSetData($idSlidercolor1, 0) ; Position du curseur au départ
GUICtrlSetData($idSlidercolor2, 0)
GUICtrlSetData($idSlidercolor3, 0)

Local $idMsg
Do ; ; Boucle tant que l'utilisateur ne quitte pas
$idMsg = GUIGetMsg() ; lecture des messages renvoyés par la gui
Switch $idMsg
Case $idSlidercolor1, $idSlidercolor2, $idSlidercolor3 ; si un curseur est touché
$color1 = GUICtrlRead($idSlidercolor1) ; on lis les valeurs des trois curseurs
$color2 = GUICtrlRead($idSlidercolor2)
$color3 = GUICtrlRead($idSlidercolor3)
$couleur_gui = StringFormat("0x%02X%02X%02X", $color1, $color2, $color3) ; %02X = nombre hexa sur 2 chiffres (5 => 05)
ConsoleWrite($couleur_gui & @CRLF)
GUICtrlSetData($gui, GUISetBkColor($couleur_gui)); et modification de la couleur de la gui
EndSwitch
Until $idMsg = $GUI_EVENT_CLOSE
EndFunc ;==>Example[/codeautoit]

Re: Controle de la Couleur par curseur RVB

Posté : mer. 29 juin 2016 15:59
par marcgforce
Super remarque et bonne adaptation du code !... merci...