Routine Spectre des couleurs Style Windows
Re: Routine Spectre des couleurs Style Windows
@Ar-S
Je vais étudier le tout ce soir, là j'ai d'autre truc à faire pour les 2-3 prochaines heures.
A+
Guimauve
Je vais étudier le tout ce soir, là j'ai d'autre truc à faire pour les 2-3 prochaines heures.
A+
Guimauve
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Routine Spectre des couleurs Style Windows
On doit pouvoir compiler sous Linux car en fait j'utilise peu d'API
Le truc le plus important en API, c'est la limitation de la zone de déplacement de la souris quand on maintient le clic, si tu as un code pour ça sous Linux, je le fait compatible sans soucis.
Les autres API que j'utilise, c'est pour masquer/afficher le curseur et pour prélever une couleur sur l'écran.
@Dobro : j'ai vu que tu l'utilisais dans EBP
Le truc le plus important en API, c'est la limitation de la zone de déplacement de la souris quand on maintient le clic, si tu as un code pour ça sous Linux, je le fait compatible sans soucis.
Les autres API que j'utilise, c'est pour masquer/afficher le curseur et pour prélever une couleur sur l'écran.
@Dobro : j'ai vu que tu l'utilisais dans EBP

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: Routine Spectre des couleurs Style Windows
@Guimauve
une petite coche pour sortir le rgb avec valeur hex
rgb($51,$26,$FF)

une petite coche pour sortir le rgb avec valeur hex
rgb($51,$26,$FF)

Re: Routine Spectre des couleurs Style Windows
Bonjour tous,
Guimauve> je prefere ma petite fleche NA lol
Pour avoir le code en hex cela est très simple je penses. Dans la procedure d'affichage des Couleur RGB, on fait.
Donc on Concatène le "#" + rgb et cela donne : Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")
Voila j'ai mis a jour le code...
Cordialement,
GallyHC
Guimauve> je prefere ma petite fleche NA lol

Pour avoir le code en hex cela est très simple je penses. Dans la procedure d'affichage des Couleur RGB, on fait.
Code : Tout sélectionner
Procedure DrawRGBText()
; ROUTINE D'AFFICHAGE DES INFOS RGB.
Define lCR.l
Define lCG.l
Define lCB.l
HLSToRGB(lCH, lCL, lCS, @lCR, @lCG, @lCB)
SetGadgetText(#String_3, Str(lCR))
SetGadgetText(#String_4, Str(lCG))
SetGadgetText(#String_5, Str(lCB))
Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")
EndProcedure
Voila j'ai mis a jour le code...
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Routine Spectre des couleurs Style Windows
Si on veut l'afficher mais ça je savais comment faire. Je songe a ajouter la possibilité d'entrer une couleur en Hexa et c'est là que je ne suis pas sûr de comment m'y prendre. Pour le moment je tente de compléter la procédure GetWindowBackgroundColor(). Elle est opérationnel pour Windows et Linux (GTK+ uniquement), la partie MacOS reste à faire.GallyHC a écrit :Bonjour tous,
Guimauve> je prefere ma petite fleche NA lol
Pour avoir le code en hex cela est très simple je penses. Dans la procedure d'affichage des Couleur RGB, on fait.
Donc on Concatène le "#" + rgb et cela donne : Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0")Code : Tout sélectionner
Procedure DrawRGBText() ; ROUTINE D'AFFICHAGE DES INFOS RGB. Define lCR.l Define lCG.l Define lCB.l HLSToRGB(lCH, lCL, lCS, @lCR, @lCG, @lCB) SetGadgetText(#String_3, Str(lCR)) SetGadgetText(#String_4, Str(lCG)) SetGadgetText(#String_5, Str(lCB)) Debug "#" + RSet(Hex(lCR), 2, "0") + RSet(Hex(lCG), 2, "0") + RSet(Hex(lCB), 2, "0") EndProcedure
Voila j'ai mis a jour le code...
Cordialement,
GallyHC
Pour ceux qui sont courageux voici le code :
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GetWindowBackgroundColor()
; File Name : GetWindowBackgroundColor.pb
; File version: 0.0.1
; Programmation : In Progress
; Programmed by : Guimauve
; Date : 19-02-2012
; Last Update : 19-02-2012
; PureBasic code : 4.60
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC ""
gtk_style_lookup_color(*style, ColorName.p-utf8, *Color)
EndImport
CompilerCase #PB_OS_MacOS
CompilerEndSelect
Procedure GetWindowBackgroundColor()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
BackgroundColor.l = GetSysColor_(#COLOR_3DFACE)
CompilerCase #PB_OS_Linux
BtnGadget = ButtonGadget(#PB_Any,0,0,0,0,"") ; Il faut créer un bouton bidon pour récupérer la couleur
If BtnGadget <> #Null
ColorNameAscii.s = Space(Len("bg_color"))
PokeS(@ColorNameAscii, "bg_color", -1, #PB_UTF8)
gtk_widget_realize_(GadgetID(BtnGadget))
*style.GtkStyle = gtk_rc_get_style_(GadgetID(BtnGadget))
If gtk_style_lookup_color(*style, ColorNameAscii, @BGColor.GDKColor)
Red = (BGColor\red / 255) & $FF
Green = (BGColor\green / 255) & $FF
Blue = (BGColor\blue / 255) & $FF
Else
Red = 238
Green = 237
Blue = 236
EndIf
FreeGadget(BtnGadget) ; On se débarasse du bouton bidon
EndIf
BackgroundColor.l = RGB(Red, Green, Blue)
CompilerCase #PB_OS_MacOS
BackgroundColor.l = RGB(237,235,236)
CompilerEndSelect
ProcedureReturn BackgroundColor
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
http://www.purebasic.fr/english/viewtop ... 92#p355870
Mais là moi je fais une pause jusqu'à demain matin.
A+
Guimauve
Re: Routine Spectre des couleurs Style Windows
Bonjour Guimauve,
La solution je parlais juste pour moi et c'été plus avec RSet() pour que ce soit plus propre
Cordialement,
GallyHC
La solution je parlais juste pour moi et c'été plus avec RSet() pour que ce soit plus propre

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Routine Spectre des couleurs Style Windows
Bonjour,
J'ai aussi teste sur le mac pour voir ce que cela donne, presque tout fonctionne sauf un TextGadget() pour mettre la couleur en grand et cela ne fonctionne pas du tout sur mac. Donc windows ok, linux ok mais pas Mac.
En gros on ne peu pas changer la couleur de fond d'un TextGadget() sur mac
Voila la capture pour voir le probleme :

Cordialement,
GallyHC
J'ai aussi teste sur le mac pour voir ce que cela donne, presque tout fonctionne sauf un TextGadget() pour mettre la couleur en grand et cela ne fonctionne pas du tout sur mac. Donc windows ok, linux ok mais pas Mac.
En gros on ne peu pas changer la couleur de fond d'un TextGadget() sur mac
Voila la capture pour voir le probleme :

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Routine Spectre des couleurs Style Windows
pourquoi tu n'utilise pas un CanvasGadget pour la couleur sélectionnée ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: Routine Spectre des couleurs Style Windows
Parce que c'est , euh, ... comment dire ... UN PEU OVER KILL ! Mais juste un peu ! En revanche, on pourrait passer par un ColorPreviewGadget()Le Soldat Inconnu a écrit :pourquoi tu n'utilise pas un CanvasGadget pour la couleur sélectionnée ?
Sinon, voici la version 1.0.8 avec l'affichage de la valeur html. On ne peut pas entrer de valeur pour le moment.
Édition : V1.0.9 Remplacement du TextGadget() par un ColorPreviewGadget() pour l'affichage de la couleur actuelle.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V3.131.634
; Nom du projet : Color Spectrum Requester
; Nom du fichier : Color Spectrum Requester.pb
; Version du fichier : 1.0.9
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 20-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC ""
gtk_style_lookup_color(*style, ColorName.p-utf8, *Color)
EndImport
CompilerCase #PB_OS_MacOS
CompilerEndSelect
Enumeration
#COLOR_SPECTRUM_TARGET_HUE
#COLOR_SPECTRUM_TARGET_SATURATION
#COLOR_SPECTRUM_TARGET_LIGHTNESS
#COLOR_SPECTRUM_TARGET_RED
#COLOR_SPECTRUM_TARGET_GREEN
#COLOR_SPECTRUM_TARGET_BLUE
#COLOR_SPECTRUM_TARGET_HTML
#COLOR_SPECTRUM_TARGET_PREVIEW
#COLOR_SPECTRUM_TARGET_MAX
EndEnumeration
Enumeration
#COLOR_SPECTRUM_TEXT_HUE
#COLOR_SPECTRUM_TEXT_SATURATION
#COLOR_SPECTRUM_TEXT_LIGHTNESS
#COLOR_SPECTRUM_TEXT_RED
#COLOR_SPECTRUM_TEXT_GREEN
#COLOR_SPECTRUM_TEXT_BLUE
#COLOR_SPECTRUM_TEXT_HTML
#COLOR_SPECTRUM_TEXT_WIN_TITLE
#COLOR_SPECTRUM_TEXT_BTN_REFRESH
#COLOR_SPECTRUM_TEXT_BTN_VALIDATE
#COLOR_SPECTRUM_TEXT_BTN_CANCEL
#COLOR_SPECTRUM_TEXT_MAX
EndEnumeration
Enumeration
#COLOR_SPECTRUM_BTN_REFRESH
#COLOR_SPECTRUM_BTN_VALIDATE
#COLOR_SPECTRUM_BTN_CANCEL
#COLOR_SPECTRUM_BTN_MAX
EndEnumeration
#COLOR_SPECTRUM_SIZE_MAX = 255
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration des Structures <<<<<
Structure Color
StructureUnion
Red.a
Hue.a
EndStructureUnion
StructureUnion
Green.a
Saturation.a
EndStructureUnion
StructureUnion
Blue.a
Lightness.a
EndStructureUnion
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetColorRed(ColorA)
ColorA\Red
EndMacro
Macro GetColorHue(ColorA)
ColorA\Hue
EndMacro
Macro GetColorGreen(ColorA)
ColorA\Green
EndMacro
Macro GetColorSaturation(ColorA)
ColorA\Saturation
EndMacro
Macro GetColorBlue(ColorA)
ColorA\Blue
EndMacro
Macro GetColorLightness(ColorA)
ColorA\Lightness
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetColorRed(ColorA, P_Red)
GetColorRed(ColorA) = P_Red
EndMacro
Macro SetColorHue(ColorA, P_Hue)
GetColorHue(ColorA) = P_Hue
EndMacro
Macro SetColorGreen(ColorA, P_Green)
GetColorGreen(ColorA) = P_Green
EndMacro
Macro SetColorLightness(ColorA, P_Lightness)
GetColorLightness(ColorA) = P_Lightness
EndMacro
Macro SetColorBlue(ColorA, P_Blue)
GetColorBlue(ColorA) = P_Blue
EndMacro
Macro SetColorSaturation(ColorA, P_Saturation)
GetColorSaturation(ColorA) = P_Saturation
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetColor(ColorA)
ClearStructure(ColorA, Color)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs Update <<<<<
Macro UpdateColorRGB(ColorA, P_Red, P_Green, P_Blue)
SetColorRed(ColorA, P_Red)
SetColorGreen(ColorA, P_Green)
SetColorBlue(ColorA, P_Blue)
EndMacro
Macro UpdateColorHSL(ColorA, P_Hue, P_Saturation, P_Lightness)
SetColorHue(ColorA, P_Hue)
SetColorSaturation(ColorA, P_Saturation)
SetColorLightness(ColorA, P_Lightness)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure ColorSpectrum
HSLRGB.l[6] ; Hue, Saturation, Lightness, Red, Green, Blue
SafeHSLRGB.l[6] ; SafeHue, SafeSaturation, SafeLightness, SafeRed, SafeGreen, SafeBlue
BackgroundLayer.l
SpectrumCanvas.l
LightnessCanvas.l
WindowHandle.l
WindowBackgroundColor.l
Text.s[#COLOR_SPECTRUM_TEXT_MAX]
TextHandle.l[#COLOR_SPECTRUM_TARGET_MAX]
StringHandle.l[#COLOR_SPECTRUM_TARGET_MAX]
ButtonHandle.l[#COLOR_SPECTRUM_BTN_MAX]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID)
ColorSpectrumA\HSLRGB[HSLRGBID]
EndMacro
Macro GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID)
ColorSpectrumA\SafeHSLRGB[SafeHSLRGBID]
EndMacro
Macro GetColorSpectrumBackgroundLayer(ColorSpectrumA)
ColorSpectrumA\BackgroundLayer
EndMacro
Macro GetColorSpectrumSpectrumCanvas(ColorSpectrumA)
ColorSpectrumA\SpectrumCanvas
EndMacro
Macro GetColorSpectrumLightnessCanvas(ColorSpectrumA)
ColorSpectrumA\LightnessCanvas
EndMacro
Macro GetColorSpectrumWindowHandle(ColorSpectrumA)
ColorSpectrumA\WindowHandle
EndMacro
Macro GetColorSpectrumWindowBackgroundColor(ColorSpectrumA)
ColorSpectrumA\WindowBackgroundColor
EndMacro
Macro GetColorSpectrumText(ColorSpectrumA, TextID)
ColorSpectrumA\Text[TextID]
EndMacro
Macro GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID)
ColorSpectrumA\TextHandle[TextHandleID]
EndMacro
Macro GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID)
ColorSpectrumA\StringHandle[StringHandleID]
EndMacro
Macro GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID)
ColorSpectrumA\ButtonHandle[ButtonHandleID]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID, P_HSLRGB)
GetColorSpectrumHSLRGB(ColorSpectrumA, HSLRGBID) = P_HSLRGB
EndMacro
Macro SetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID, P_SafeHSLRGB)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, SafeHSLRGBID) = P_SafeHSLRGB
EndMacro
Macro SetColorSpectrumBackgroundLayer(ColorSpectrumA, P_BackgroundLayer)
GetColorSpectrumBackgroundLayer(ColorSpectrumA) = P_BackgroundLayer
EndMacro
Macro SetColorSpectrumSpectrumCanvas(ColorSpectrumA, P_SpectrumCanvas)
GetColorSpectrumSpectrumCanvas(ColorSpectrumA) = P_SpectrumCanvas
EndMacro
Macro SetColorSpectrumLightnessCanvas(ColorSpectrumA, P_LightnessCanvas)
GetColorSpectrumLightnessCanvas(ColorSpectrumA) = P_LightnessCanvas
EndMacro
Macro SetColorSpectrumWindowHandle(ColorSpectrumA, P_WindowHandle)
GetColorSpectrumWindowHandle(ColorSpectrumA) = P_WindowHandle
EndMacro
Macro SetColorSpectrumWindowBackgroundColor(ColorSpectrumA, P_WindowBackgroundColor)
GetColorSpectrumWindowBackgroundColor(ColorSpectrumA) = P_WindowBackgroundColor
EndMacro
Macro SetColorSpectrumText(ColorSpectrumA, TextID, P_Text)
GetColorSpectrumText(ColorSpectrumA, TextID) = P_Text
EndMacro
Macro SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, P_TextHandle)
GetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID) = P_TextHandle
EndMacro
Macro SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, P_StringHandle)
GetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID) = P_StringHandle
EndMacro
Macro SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, P_ButtonHandle)
GetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID) = P_ButtonHandle
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetColorSpectrum(ColorSpectrumA)
SetColorSpectrumBackgroundLayer(ColorSpectrumA, 0)
SetColorSpectrumSpectrumCanvas(ColorSpectrumA, 0)
SetColorSpectrumLightnessCanvas(ColorSpectrumA, 0)
SetColorSpectrumWindowHandle(ColorSpectrumA, 0)
SetColorSpectrumWindowBackgroundColor(ColorSpectrumA, 0)
For TextID = 0 To 9
SetColorSpectrumText(ColorSpectrumA, TextID, "")
Next
For TextHandleID = 0 To 6
SetColorSpectrumTextHandle(ColorSpectrumA, TextHandleID, 0)
Next
For StringHandleID = 0 To 5
SetColorSpectrumStringHandle(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumHSLRGB(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumSafeHSLRGB(ColorSpectrumA, StringHandleID, 0)
Next
For ButtonHandleID = 0 To 2
SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, 0)
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs spéciaux <<<<<
Macro GetColorSpectrumHue(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
EndMacro
Macro GetColorSpectrumLightness(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
EndMacro
Macro GetColorSpectrumSaturation(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
EndMacro
Macro GetColorSpectrumRed(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
EndMacro
Macro GetColorSpectrumGreen(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
EndMacro
Macro GetColorSpectrumBlue(ColorSpectrumA)
GetColorSpectrumHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
EndMacro
Macro GetColorSpectrumSafeHue(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
EndMacro
Macro GetColorSpectrumSafeLightness(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
EndMacro
Macro GetColorSpectrumSafeSaturation(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
EndMacro
Macro GetColorSpectrumSafeRed(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
EndMacro
Macro GetColorSpectrumSafeGreen(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
EndMacro
Macro GetColorSpectrumSafeBlue(ColorSpectrumA)
GetColorSpectrumSafeHSLRGB(ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetColorSpectrumHue(ColorSpectrumA, P_Hue)
GetColorSpectrumHue(ColorSpectrumA) = P_Hue
EndMacro
Macro SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
EndMacro
Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
EndMacro
Macro SetColorSpectrumRed(ColorSpectrumA, P_Red)
GetColorSpectrumRed(ColorSpectrumA) = P_Red
EndMacro
Macro SetColorSpectrumGreen(ColorSpectrumA, P_Green)
GetColorSpectrumGreen(ColorSpectrumA) = P_Green
EndMacro
Macro SetColorSpectrumBlue(ColorSpectrumA, P_Blue)
GetColorSpectrumBlue(ColorSpectrumA) = P_Blue
EndMacro
Macro SetColorSpectrumSafeHue(ColorSpectrumA, P_SafeHue)
GetColorSpectrumSafeHue(ColorSpectrumA) = P_SafeHue
EndMacro
Macro SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
EndMacro
Macro SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
EndMacro
Macro SetColorSpectrumSafeRed(ColorSpectrumA, P_SafeRed)
GetColorSpectrumSafeRed(ColorSpectrumA) = P_SafeRed
EndMacro
Macro SetColorSpectrumSafeGreen(ColorSpectrumA, P_SafeGreen)
GetColorSpectrumSafeGreen(ColorSpectrumA) = P_SafeGreen
EndMacro
Macro SetColorSpectrumSafeBlue(ColorSpectrumA, P_SafeBlue)
GetColorSpectrumSafeBlue(ColorSpectrumA) = P_SafeBlue
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.012 secondes (30333.33 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les opérateurs de Formatage <<<<<
Macro FormatColorSpectrumRGB(ColorSpectrumA)
"RGB(" + Str(GetColorSpectrumRed(ColorSpectrumA)) + ", " + Str(GetColorSpectrumGreen(ColorSpectrumA)) + ", " + Str(GetColorSpectrumBlue(ColorSpectrumA)) + ")"
EndMacro
Macro FormatColorSpectrumHSL(ColorSpectrumA)
"HSL(" + Str(GetColorSpectrumHue(ColorSpectrumA)) + ", " + Str(GetColorSpectrumSaturation(ColorSpectrumA)) + ", " + Str(GetColorSpectrumLightness(ColorSpectrumA)) + ")"
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion vers couleur entier long <<<<<
Macro ColorSpectrum_RGB(ColorSpectrumA)
(GetColorSpectrumBlue(ColorSpectrumA) << 16 + GetColorSpectrumGreen(ColorSpectrumA) << 8 + GetColorSpectrumRed(ColorSpectrumA))
EndMacro
Macro Color_RGB(ColorA)
(GetColorBlue(ColorA) << 16 + GetColorGreen(ColorA) << 8 + GetColorRed(ColorA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Conversion RGB vers Hexa <<<<<
Macro ColorSpectrum_RGB_To_Hexa(ColorSpectrumA)
RSet(Hex(GetColorSpectrumRed(ColorSpectrumA)), 2, "0") + RSet(Hex(GetColorSpectrumGreen(ColorSpectrumA)), 2, "0") + RSet(Hex(GetColorSpectrumBlue(ColorSpectrumA)), 2, "0")
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Min et Max de 3 nombres <<<<<
Macro MinMaxNumber(P_Min, P_Max, P_Number01, P_Number02, P_Number03)
P_Min = P_Number01
If P_Number02 < P_Min
P_Min = P_Number02
EndIf
If P_Number03 < P_Min
P_Min = P_Number03
EndIf
P_Max = P_Number01
If P_Number02 > P_Max
P_Max = P_Number02
EndIf
If P_Number03 > P_Max
P_Max = P_Number03
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<
Procedure InitializeColorSpectrum(*ColorSpectrumA.ColorSpectrum)
; On force des valeurs initiales pour le HSL
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
; On met les textes en Français, il faudrait vérifier pour une éventuelle
; intégration avec le système de Language basé sur les fichiers *.mo.
; L'autre solution est d'initialiser ColorSpectrum, puis ajouter une
; commande de transfer entre la structure ColorSpectrum et le système
; de Language. Si on ne fait pas de ResetColorSpectrum() l'initialisation
; pourra être faite au lancement du programme principal et les textes
; resteront en mémoire jusqu'à la fin du programme.
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_HUE, "Teinte")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_LIGHTNESS, "Luminosité")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_SATURATION, "Saturation")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_RED, "Rouge")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_GREEN, "Vert")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BLUE, "Bleu")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_HTML, "Html")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_WIN_TITLE, "Spectre de couleurs")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BTN_REFRESH, "Rafraichir")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BTN_VALIDATE, "Valider")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_BTN_CANCEL, "Annuler")
EndProcedure
Procedure GetWindowBackgroundColor()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
BackgroundColor.l = GetSysColor_(#COLOR_3DFACE)
CompilerCase #PB_OS_Linux
BtnGadget = ButtonGadget(#PB_Any,0,0,0,0,"") ; Il faut créer un bouton bidon pour récupérer la couleur
If BtnGadget <> #Null
ColorNameUTF8.s = Space(Len("bg_color"))
PokeS(@ColorNameUTF8, "bg_color", -1, #PB_UTF8)
gtk_widget_realize_(GadgetID(BtnGadget))
*style.GtkStyle = gtk_rc_get_style_(GadgetID(BtnGadget))
If gtk_style_lookup_color(*style, ColorNameUTF8, @BGColor.GDKColor)
Red = (BGColor\red / 255) & $FF
Green = (BGColor\green / 255) & $FF
Blue = (BGColor\blue / 255) & $FF
Else
Red = 238
Green = 237
Blue = 236
EndIf
FreeGadget(BtnGadget) ; On se débarasse du bouton bidon
EndIf
BackgroundColor.l = RGB(Red, Green, Blue)
CompilerCase #PB_OS_MacOS
BackgroundColor.l = RGB(237,235,236)
CompilerEndSelect
ProcedureReturn BackgroundColor
EndProcedure
Procedure UpdateColorPreviewGadget(GadgetID.l, Color.l)
If GetGadgetData(GadgetID) <> #Null
Width = GadgetWidth(GadgetID)
Height = GadgetHeight(GadgetID)
If StartDrawing(ImageOutput(GetGadgetData(GadgetID)))
Box(0, 0, Width, Height, Color)
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, Width, Height, 0)
StopDrawing()
SetGadgetState(GadgetID, ImageID(GetGadgetData(GadgetID)))
EndIf
EndIf
EndProcedure
Procedure ColorPreviewGadget(GadgetID.l, x.w, y.w, Width.w, Height.w, Color.l)
GadgetHandle = ImageGadget(GadgetID, x, y, Width, Height, 0)
If GadgetID = #PB_Any
GadgetID = GadgetHandle
EndIf
SetGadgetData(GadgetID, CreateImage(#PB_Any, Width, Height))
UpdateColorPreviewGadget(GadgetID, Color)
ProcedureReturn GadgetHandle
EndProcedure
Procedure.l Private_ConvertRM(M1.f, M2.f, HueColor.f)
; ROUTINE DE CALCUL DE LA COMPOSANTE DE COULEUR.
If HueColor > 360
HueColor - 360
EndIf
If HueColor < 0
HueColor + 360
EndIf
If HueColor < 60
M1 = M1 + (M2 - M1) * HueColor / 60
Else
If HueColor < 180
M1 = M2
Else
If HueColor < 240
M1 = M1 + (M2 - M1) * (240 - HueColor) / 60
EndIf
EndIf
EndIf
ProcedureReturn M1 * 255
EndProcedure
Procedure Convert_RGB_To_HSL(*RGBColorA.Color, *HSLColorA.Color)
; ROUTINE DE CONSERTION DU RGB EN HLS.
MinMaxNumber(Min.l, Max.l, GetColorRed(*RGBColorA), GetColorGreen(*RGBColorA), GetColorBlue(*RGBColorA))
DeltaMaxMin.l = Max - Min
SumMaxMin.l = Max + Min
LightnessColor.f = SumMaxMin / 510
If Max = Min
HueColor.f = 0
SaturationColor.f = 0
Else
NormalizedRed = (Max - GetColorRed(*RGBColorA)) / DeltaMaxMin
NormalizedGreen = (Max - GetColorGreen(*RGBColorA)) / DeltaMaxMin
NormalizedBlue = (Max - GetColorBlue(*RGBColorA)) / DeltaMaxMin
If LightnessColor <= 0.5
SaturationColor = DeltaMaxMin / SumMaxMin
Else
SaturationColor = DeltaMaxMin / (510 - SumMaxMin)
EndIf
If GetColorRed(*RGBColorA) = Max
HueColor = 60 * (6 + NormalizedBlue - NormalizedGreen)
EndIf
If GetColorGreen(*RGBColorA) = Max
HueColor = 60 * (2 + NormalizedRed - NormalizedBlue)
EndIf
If GetColorBlue(*RGBColorA) = Max
HueColor = 60 * (4 + NormalizedGreen - NormalizedRed)
EndIf
EndIf
If HueColor = 360
HueColor = 0
EndIf
HueColor = HueColor / 360 * #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor * #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor * #COLOR_SPECTRUM_SIZE_MAX
SetColorHue(*HSLColorA, Int(HueColor))
SetColorSaturation(*HSLColorA, Int(SaturationColor))
SetColorLightness(*HSLColorA, Int(LightnessColor))
EndProcedure
Procedure Convert_HSL_To_RGB(HueColor.f, LightnessColor.f, SaturationColor.f, *RGBColorA.Color)
; ROUTINE DE CONSERTION DU HSL EN RGB.
HueColor = HueColor * 360 / #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor / #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor / #COLOR_SPECTRUM_SIZE_MAX
If SaturationColor = 0.0
SetColorRed(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorGreen(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorBlue(*RGBColorA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
Else
If LightnessColor <= 0.5
M2.f = LightnessColor + LightnessColor * SaturationColor
Else
M2 = LightnessColor + SaturationColor - LightnessColor * SaturationColor
EndIf
M1.f = 2 * LightnessColor - M2
SetColorRed(*RGBColorA, Private_ConvertRm(M1, M2, HueColor + 120))
SetColorGreen(*RGBColorA, Private_ConvertRm(M1, M2, HueColor))
SetColorBlue(*RGBColorA, Private_ConvertRm(M1, M2, HueColor - 120))
EndIf
EndProcedure
Procedure GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
SetColorSpectrumBackgroundLayer(*ColorSpectrumA, CreateImage(#PB_Any, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
If StartDrawing(ImageOutput(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)))
Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For SaturationID = 1 To #COLOR_SPECTRUM_SIZE_MAX
For HueID = 1 To #COLOR_SPECTRUM_SIZE_MAX
Convert_HSL_To_RGB(HueID, #COLOR_SPECTRUM_SIZE_MAX / 2, SaturationID, RGBColor.Color)
Plot(HueID, (#COLOR_SPECTRUM_SIZE_MAX - SaturationID) + 1, Color_RGB(RGBColor))
Next
Next
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure ColorSpectrum_DrawCross(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA CROIX DU SPECTRE.
PosX = GetColorSpectrumHue(*ColorSpectrumA)
PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumSaturation(*ColorSpectrumA)
If PosX < #COLOR_SPECTRUM_SIZE_MAX
PosX + 1
EndIf
If PosY < #COLOR_SPECTRUM_SIZE_MAX
PosY + 1
EndIf
Box(PosX - 1, PosY - 9, 3, 5, 0)
Box(PosX - 1, PosY + 5, 3, 5, 0)
Box(PosX - 9, PosY - 1, 5, 3, 0)
Box(PosX + 5, PosY - 1, 5, 3, 0)
EndProcedure
Procedure ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA BARRE DE LIGHTNESS
y1 = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
If y1 => #COLOR_SPECTRUM_SIZE_MAX
y1 = #COLOR_SPECTRUM_SIZE_MAX - 1
EndIf
; Box(22, PosY, 8, 3, 0)
x1 = 22
x2 = 33
y1 + 1
y2 = y1 + 5
y3 = y1 - 5
xm = (x1 + x2) >> 1
LineXY(x1, y1, x2, y2, 0)
LineXY(x2, y2, x2, y3, 0)
LineXY(x2, y3, x1, y1, 0)
FillArea(xm, y1, 0, 0);$FFFFFF)
EndProcedure
Procedure ColorSpectrum_SpectrumRedraw(*ColorSpectrumA.ColorSpectrum)
; ROUTINE D'AFFICHAGE DU SPECTRE ET CROIX.
If StartDrawing(CanvasOutput(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)))
If GetColorSpectrumBackgroundLayer(*ColorSpectrumA) <> #Null
DrawImage(ImageID(GetColorSpectrumBackgroundLayer(*ColorSpectrumA)), 0, 0)
EndIf
ColorSpectrum_DrawCross(*ColorSpectrumA)
StopDrawing()
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
UpdateColorPreviewGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_PREVIEW), Color_RGB(RGBColor))
EndIf
EndProcedure
Procedure ColorSpectrum_LightnessRedraw(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
If StartDrawing(CanvasOutput(GetColorSpectrumLightnessCanvas(*ColorSpectrumA)))
CurrentLightness = GetColorSpectrumLightness(*ColorSpectrumA)
Box(0, 0, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2, GetColorSpectrumWindowBackgroundColor(*ColorSpectrumA))
Box(0, 0, 20, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For LightnessID = 1 To #COLOR_SPECTRUM_SIZE_MAX
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), LightnessID, GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
LineXY(1, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, 18, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, Color_RGB(RGBColor))
Next
SetColorSpectrumLightness(*ColorSpectrumA, CurrentLightness)
ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
StopDrawing()
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
UpdateColorPreviewGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_PREVIEW), Color_RGB(RGBColor))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Free Gadgets <<<<<
Procedure FreeColorSpectrumGadget(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumRed(*ColorSpectrumA, 0)
SetColorSpectrumGreen(*ColorSpectrumA, 0)
SetColorSpectrumBlue(*ColorSpectrumA, 0)
For Index = 0 To 2
FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index))
FreeGadget(GetColorSpectrumTextHandle(*ColorSpectrumA, Index+3))
FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index))
FreeGadget(GetColorSpectrumStringHandle(*ColorSpectrumA, Index+3))
FreeGadget(GetColorSpectrumButtonHandle(*ColorSpectrumA, Index))
Next
FreeGadget(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA))
FreeGadget(GetColorSpectrumLightnessCanvas(*ColorSpectrumA))
FreeImage(GetColorSpectrumBackgroundLayer(*ColorSpectrumA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshHSLColorOutput <<<<<
Procedure RefreshHSLColorOutput(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_LIGHTNESS
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
Next
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML), ColorSpectrum_RGB_To_Hexa(*ColorSpectrumA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshRGBColorOutput <<<<<
Procedure RefreshRGBColorOutput(*ColorSpectrumA.ColorSpectrum)
Convert_HSL_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), RGBColor.Color)
SetColorSpectrumRed(*ColorSpectrumA, GetColorRed(RGBColor))
SetColorSpectrumGreen(*ColorSpectrumA, GetColorGreen(RGBColor))
SetColorSpectrumBlue(*ColorSpectrumA, GetColorBlue(RGBColor))
For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID)))
Next
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML), ColorSpectrum_RGB_To_Hexa(*ColorSpectrumA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchRGBColorInput <<<<<
Procedure CatchRGBColorInput(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
Next
SetColorRed(RGBColor.Color, GetColorSpectrumRed(*ColorSpectrumA))
SetColorGreen(RGBColor, GetColorSpectrumGreen(*ColorSpectrumA))
SetColorBlue(RGBColor, GetColorSpectrumBlue(*ColorSpectrumA))
Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchSafeHSLRGB <<<<<
Procedure CatchSafeHSLRGB(*ColorSpectrumA.ColorSpectrum)
For TargetID = #COLOR_SPECTRUM_TARGET_HUE To #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, TargetID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, TargetID))))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<
Procedure RefeshColorSpectrum(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumHue(*ColorSpectrumA, 0)
SetColorSpectrumSaturation(*ColorSpectrumA, 0)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumRed(*ColorSpectrumA, 0)
SetColorSpectrumGreen(*ColorSpectrumA, 0)
SetColorSpectrumBlue(*ColorSpectrumA, 0)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshSpectrum <<<<<
Procedure ForceColorSpectrumStartColor(*ColorSpectrumA.ColorSpectrum, Color.l)
If Color <> - 1
SetColorSpectrumRed(*ColorSpectrumA, Red(Color))
SetColorSpectrumGreen(*ColorSpectrumA, Green(Color))
SetColorSpectrumBlue(*ColorSpectrumA, Blue(Color))
For Index = #COLOR_SPECTRUM_TARGET_RED To #COLOR_SPECTRUM_TARGET_BLUE
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHSLRGB(*ColorSpectrumA, Index)))
Next
CatchRGBColorInput(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
Else
RefreshRGBColorOutput(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_SpectrumCanvas_EventManager <<<<<
Procedure ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown Or ( EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
MouseX.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseX)
MouseY.l = GetGadgetAttribute(GetColorSpectrumSpectrumCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
If MouseX < 0
MouseX = 0
Else
If MouseX > #COLOR_SPECTRUM_SIZE_MAX
MouseX = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
If MouseY < 0
MouseY = 0
Else
If MouseY > #COLOR_SPECTRUM_SIZE_MAX
MouseY = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
SetColorSpectrumHue(*ColorSpectrumA, MouseX)
SetColorSpectrumSaturation(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_LightnessCanvas_EventManager <<<<<
Procedure ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown Or (EventType = #PB_EventType_MouseMove And GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
MouseY.l = GetGadgetAttribute(GetColorSpectrumLightnessCanvas(*ColorSpectrumA), #PB_Canvas_MouseY)
If MouseY < 0
MouseY = 0
Else
If MouseY > #COLOR_SPECTRUM_SIZE_MAX
MouseY = #COLOR_SPECTRUM_SIZE_MAX
EndIf
EndIf
SetColorSpectrumLightness(*ColorSpectrumA, #COLOR_SPECTRUM_SIZE_MAX - MouseY)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHSLColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHSLRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Hue Input Control <<<<<
Procedure ColorSpectrum_Input_Control(*ColorSpectrumA.ColorSpectrum, Target.b)
EventType = EventType()
If EventType = #PB_EventType_Change
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target))))
If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) < 0
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 0)
EndIf
If GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target) > 255
SetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target, 255)
EndIf
Select Target
Case #COLOR_SPECTRUM_TARGET_HUE, #COLOR_SPECTRUM_TARGET_LIGHTNESS, #COLOR_SPECTRUM_TARGET_SATURATION
SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
Case #COLOR_SPECTRUM_TARGET_RED, #COLOR_SPECTRUM_TARGET_GREEN, #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHSLRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target))
SetColorRed(RGBColor.Color, GetColorSpectrumSafeRed(*ColorSpectrumA))
SetColorGreen(RGBColor, GetColorSpectrumSafeGreen(*ColorSpectrumA))
SetColorBlue(RGBColor, GetColorSpectrumSafeBlue(*ColorSpectrumA))
Convert_RGB_To_HSL(RGBColor, HSLColor.Color)
SetColorSpectrumHue(*ColorSpectrumA, GetColorHue(HSLColor))
SetColorSpectrumSaturation(*ColorSpectrumA, GetColorSaturation(HSLColor))
SetColorSpectrumLightness(*ColorSpectrumA, GetColorLightness(HSLColor))
EndSelect
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
ElseIf EventType = #PB_EventType_LostFocus
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target), Str(GetColorSpectrumSafeHSLRGB(*ColorSpectrumA, Target)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrumRequester <<<<<
Procedure.l ColorSpectrumRequester(*ColorSpectrumA.ColorSpectrum, Color.l = -1)
SetColorSpectrumWindowHandle(*ColorSpectrumA, OpenWindow(#PB_Any, 0, 0, #COLOR_SPECTRUM_SIZE_MAX + 60, #COLOR_SPECTRUM_SIZE_MAX + 170, GetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_WIN_TITLE), #PB_Window_SystemMenu | #PB_Window_ScreenCentered))
If GetColorSpectrumWindowHandle(*ColorSpectrumA) <> #Null
SetColorSpectrumSpectrumCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 5, 5, #COLOR_SPECTRUM_SIZE_MAX + 2, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumLightnessCanvas(*ColorSpectrumA, CanvasGadget(#PB_Any, 270, 5, 35, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_PREVIEW, ColorPreviewGadget(#PB_Any, 5, 270, 80, 84, 0))
PosX = 5
PosY = 270
For Index = 0 To 2
SetColorSpectrumTextHandle(*ColorSpectrumA, Index, TextGadget(#PB_Any, 110, PosY, 70, 25, GetColorSpectrumText(*ColorSpectrumA, Index), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index, StringGadget(#PB_Any, 185, PosY, 33, 25, ""))
SetColorSpectrumTextHandle(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TARGET_RED, TextGadget(#PB_Any, 225, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TEXT_RED), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TARGET_RED, StringGadget(#PB_Any, 275, PosY, 33, 25, ""))
SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 390, 98, 30, GetColorSpectrumText(*ColorSpectrumA, Index + #COLOR_SPECTRUM_TEXT_BTN_REFRESH)))
PosX + 103
PosY + 30
Next
SetColorSpectrumTextHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML, TextGadget(#PB_Any, 163, PosY, 70, 25, GetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TEXT_HTML), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HTML, StringGadget(#PB_Any, 238, PosY, 70, 25, "", #PB_String_ReadOnly))
SetColorSpectrumWindowBackgroundColor(*ColorSpectrumA, GetWindowBackgroundColor())
GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
ForceColorSpectrumStartColor(*ColorSpectrumA, Color)
CatchSafeHSLRGB(*ColorSpectrumA)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
ReturnSelectedColor.l = -1
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case GetColorSpectrumSpectrumCanvas(*ColorSpectrumA)
ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA)
Case GetColorSpectrumLightnessCanvas(*ColorSpectrumA)
ColorSpectrum_LightnessCanvas_EventManager(*ColorSpectrumA)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN)
Case GetColorSpectrumStringHandle(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
ColorSpectrum_Input_Control(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE)
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 0)
RefeshColorSpectrum(*ColorSpectrumA)
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 1)
ReturnSelectedColor = ColorSpectrum_RGB(*ColorSpectrumA)
EventID = #PB_Event_CloseWindow
Case GetColorSpectrumButtonHandle(*ColorSpectrumA, 2)
EventID = #PB_Event_CloseWindow
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
FreeColorSpectrumGadget(*ColorSpectrumA)
CloseWindow(GetColorSpectrumWindowHandle(*ColorSpectrumA))
EndIf
ProcedureReturn ReturnSelectedColor
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
InitializeColorSpectrum(ColorSpectrum.ColorSpectrum)
Color.l = ColorSpectrumRequester(ColorSpectrum, RGB(31, 196, 243))
If Color <> -1
Debug "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color)) + ", " + Str(Blue(Color)) + ")"
Else
Debug "L'utilisateur à annuler la sélection de la couleur"
EndIf
ResetColorSpectrum(ColorSpectrum)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Dernière modification par Guimauve le mar. 21/févr./2012 2:58, modifié 2 fois.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Routine Spectre des couleurs Style Windows
ColorPreviewGadget() ?? c'est quoi cette bête ? j'ai pas de ça dans mon PB moi 

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: Routine Spectre des couleurs Style Windows
Il est enfouis dans le code précédent. je le redonne ici :Le Soldat Inconnu a écrit :ColorPreviewGadget() ?? c'est quoi cette bête ? j'ai pas de ça dans mon PB moi
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : ColorPreviewGadget
; Fichier : ColorPreviewGadget.pb
; Version : 1.0.1
; Programmation : OK
; Programmé par : Guimauve
; Date : 03-05-2007
; Mise à jour : 20-02-2012
; Codé avec PureBasic V4.61 Beta
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure UpdateColorPreviewGadget(GadgetID.l, Color.l)
If GetGadgetData(GadgetID) <> #Null
Width = GadgetWidth(GadgetID)
Height = GadgetHeight(GadgetID)
If StartDrawing(ImageOutput(GetGadgetData(GadgetID)))
Box(0, 0, Width, Height, Color)
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, Width, Height, 0)
StopDrawing()
SetGadgetState(GadgetID, ImageID(GetGadgetData(GadgetID)))
EndIf
EndIf
EndProcedure
Procedure ColorPreviewGadget(GadgetID.l, x.w, y.w, Width.w, Height.w, Color.l)
GadgetHandle = ImageGadget(GadgetID, x, y, Width, Height, 0)
If GadgetID = #PB_Any
GadgetID = GadgetHandle
EndIf
SetGadgetData(GadgetID, CreateImage(#PB_Any, Width, Height))
UpdateColorPreviewGadget(GadgetID, Color)
ProcedureReturn GadgetHandle
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Guimauve
Re: Routine Spectre des couleurs Style Windows
Bonjour à tous,
Pour la question de la couleur de fond de la fenêtre utilisé pour dessiner, suite a une suggestion sur le forum anglais. La solution la plus simple et vraiment multi plate-forme serait d'imposer une couleur pour le fond de la fenêtre et l'utiliser pour dessiner le fond du LightnessCanvasGadget() afin de ne pas avoir de fond blanc par défaut.
Vous en pensez quoi ? Je laisse le code actuel sur le forum mais je modifie celui que j'ai dans mes codes pour le rendre plus simple. J'attends vos retour avec impatience.
A+
Guimauve
Pour la question de la couleur de fond de la fenêtre utilisé pour dessiner, suite a une suggestion sur le forum anglais. La solution la plus simple et vraiment multi plate-forme serait d'imposer une couleur pour le fond de la fenêtre et l'utiliser pour dessiner le fond du LightnessCanvasGadget() afin de ne pas avoir de fond blanc par défaut.
Vous en pensez quoi ? Je laisse le code actuel sur le forum mais je modifie celui que j'ai dans mes codes pour le rendre plus simple. J'attends vos retour avec impatience.
A+
Guimauve
Re: Routine Spectre des couleurs Style Windows
Mode boulet > On
Moi je t'es demander 3 fonction
mais je n'es rien eux
Et puis en plus toujours pas compris pourquoi les valeurs sont différentes, bref
Mode boulet > Off
Moi je t'es demander 3 fonction
mais je n'es rien eux


Mode boulet > Off
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
Re: Routine Spectre des couleurs Style Windows
bonjour,
C'est juste un calcul mathematique alors tout depend de comment on le fait, dans ma version j'ai esseyer de prendre tout en compte donc peu etre plus precis je ne sais pas? mais bon dans tout les cas c'est a pas grand chose. si tu utilise mspaint deja regarde que le spectre de couleur de seven et vista son 2 fois moin grand que celui que j'ai fait. sachant que pour ma part je suis en 256 * 256 pixels.
Alors la precision est dans le calcul et viole le pourquoi du comment
cordialement,
gallyhc
C'est juste un calcul mathematique alors tout depend de comment on le fait, dans ma version j'ai esseyer de prendre tout en compte donc peu etre plus precis je ne sais pas? mais bon dans tout les cas c'est a pas grand chose. si tu utilise mspaint deja regarde que le spectre de couleur de seven et vista son 2 fois moin grand que celui que j'ai fait. sachant que pour ma part je suis en 256 * 256 pixels.
Alors la precision est dans le calcul et viole le pourquoi du comment
cordialement,
gallyhc
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)