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
Controle de la Couleur par curseur RVB
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 3
- Messages : 47
- Enregistré le : lun. 07 mars 2016 07:20
- Status : Hors ligne
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: Controle de la Couleur par curseur RVB
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
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]
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]
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
-
- Niveau 3
- Messages : 47
- Enregistré le : lun. 07 mars 2016 07:20
- Status : Hors ligne
Re: Controle de la Couleur par curseur RVB
Super remarque et bonne adaptation du code !... merci...