Controle de la Couleur par curseur RVB

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
marcgforce
Niveau 3
Niveau 3
Messages : 33
Enregistré le : lun. 07 mars 2016 07:20
Status : Hors ligne

Controle de la Couleur par curseur RVB

#1

Message par marcgforce » mer. 29 juin 2016 11:25

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

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1454
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: Controle de la Couleur par curseur RVB

#2

Message par orax » mer. 29 juin 2016 12:34

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]
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

marcgforce
Niveau 3
Niveau 3
Messages : 33
Enregistré le : lun. 07 mars 2016 07:20
Status : Hors ligne

Re: Controle de la Couleur par curseur RVB

#3

Message par marcgforce » mer. 29 juin 2016 14:59

Super remarque et bonne adaptation du code !... merci...

Répondre