Re: Routine Spectre des couleurs Style Windows
Publié : jeu. 16/févr./2012 21:48
Ouep je viens voir le probléme en fait et je cherche mais faudrais que quand on valide le string on met les valeurs et pas tout le temps
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.
DisableASM
EnableExplicit
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES (GLOBALE).
;{ - ENUMERATION
Enumeration
#Window_main
EndEnumeration
Enumeration
#Canvas_0
#Canvas_1
#Text_0
#Text_1
#Text_2
#Text_3
#Text_4
#Text_5
#Text_6
#String_0
#String_1
#String_2
#String_3
#String_4
#String_5
EndEnumeration
;}
;{ - CONSTANTE
#Color_spectre_XY = 255
;}
;{ - GLOBAL
Global lCH.l = 0
Global lCS.l = 0
Global lCL.l = 127
Global lImage.l
;}
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure RGBToHLS(lCR.l, lCG.l, lCB.l, *lCH.l, *lCL.l, *lCS.l)
; ROUTINE DE CONSERTION DU RGB EN HLS.
Define fCH.f
Define fCS.f
Define fCL.f
Define lMin.l
Define lMax.l
Define lDif.l
Define lSum.l
Define lNmR.l
Define lNmG.l
Define lNmB.l
If lCR < lCG
If lCR < lCB
lMin = lCR
Else
lMin = lCB
EndIf
Else
If lCG < lCB
lMin = lCG
Else
lMin = lCB
EndIf
EndIf
If lCR > lCG
If lCR > lCG
lMax = lCR
Else
lMax = lCB
EndIf
Else
If lCG > lCB
lMax = lCG
Else
lMax = lCB
EndIf
EndIf
lDif = lMax - lMin
lSum = lMax + lMin
fCL = lSum / 510
If lMax = lMin
fCH = 0
fCS = 0
Else
lNmR = (lMax - lCR) / lDif
lNmG = (lMax - lCG) / lDif
lNmB = (lMax - lCB) / lDif
If fCL <= 0.5
fCS = lDif / lSum
Else
fCS = lDif / (510 - lSum)
EndIf
If lCR = lMax
fCH = 60 * (6 + lNmB - lNmG)
EndIf
If lCG = lMax
fCH = 60 * (2 + lNmR - lNmB)
EndIf
If lCB = lMax
fCH = 60 * (4 + lNmG - lNmR)
EndIf
EndIf
If fCH = 360
fCH = 0
EndIf
fCH = (fCH / 360 * #Color_spectre_XY)
fCL = fCL * #Color_spectre_XY
fCS = fCS * #Color_spectre_XY
PokeL(*lCH, Int(fCH))
PokeL(*lCL, Int(fCL))
PokeL(*lCS, Int(fCS))
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure.l ConvertRM(fM1.f, fM2.f, fCH.f)
; ROUTINE DE CALCUL DE LA COMPOSENTE DE COULEUR.
If fCH > 360
fCH - 360
EndIf
If fCH < 0
fCH + 360
EndIf
If fCH < 60
fM1 = fM1 + (fM2 - fM1) * fCH / 60
Else
If fCH < 180
fM1 = fM2
Else
If fCH < 240
fM1 = fM1 + (fM2 - fM1) * (240 - fCH) / 60
EndIf
EndIf
EndIf
ProcedureReturn fM1 * 255
EndProcedure
Procedure HLSToRGB(fCH.f, fCL.f, fCS.f, *lCR.l, *lCG.l, *lCB.l)
; ROUTINE DE CONSERTION DU HLS EN RGB.
Define fM1.f
Define fM2.f
fCH = fCH * 360 / #Color_spectre_XY
fCL = fCL / #Color_spectre_XY
fCS = fCS / #Color_spectre_XY
If fCS = 0
PokeL(*lCR, fCL * 255)
PokeL(*lCG, fCL * 255)
PokeL(*lCB, fCL * 255)
Else
If fCL <= 0.5
fM2 = fCL + fCL * fCS
Else
fM2 = fCL + fCS - fCL * fCS
EndIf
fM1 = 2 * fCL - fM2
PokeL(*lCR, ConvertRM(fM1, fM2, fCH + 120))
PokeL(*lCG, ConvertRM(fM1, fM2, fCH))
PokeL(*lCB, ConvertRM(fM1, fM2, fCH - 120))
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure setDrawCross(lX.l, lY.l)
; ROUTINE DE TRACAGE DE LA CROIX DU SPECTRE.
If lX < #Color_spectre_XY
lX + 1
EndIf
If lY < #Color_spectre_XY
lY + 1
EndIf
Box(lX - 1, lY - 9, 3, 5, $000000)
Box(lX - 1, lY + 5, 3, 5, $000000)
Box(lX - 9, lY - 1, 5, 3, $000000)
Box(lX + 5, lY - 1, 5, 3, $000000)
EndProcedure
Procedure setGenerateStectre()
; ROUTINE DE PRECALCUL DU SPECTRE DE COULEUR.
Define lH.l
Define lS.l
Define lCR.l
Define lCG.l
Define lCB.l
lImage = CreateImage(#PB_Any, #Color_spectre_XY + 2, #Color_spectre_XY + 2)
If lImage <> 0
If StartDrawing(ImageOutput(lImage))
Box(0, 0, #Color_spectre_XY + 2, #Color_spectre_XY + 2, $000000)
For lS = 1 To #Color_spectre_XY
For lH = 1 To #Color_spectre_XY
HLSToRGB(lH, #Color_spectre_XY / 2, lS, @lCR, @lCG, @lCB)
Plot(lH,(#Color_spectre_XY - lS) + 1, RGB(lCR, lCG, lCB))
Next lH
Next lS
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure setDrawSpectre()
; ROUTINE D'AFFICHAGE DU SPECTRE ET CROIX.
Define lH.l
Define lS.l
Define lCR.l
Define lCG.l
Define lCB.l
If StartDrawing(CanvasOutput(#Canvas_0))
If lImage <> 0
DrawAlphaImage(ImageID(lImage), 0, 0)
EndIf
setDrawCross(lCH, #Color_spectre_XY - lCS)
HLSToRGB(lCH, lCL, lCS, @lCR, @lCG, @lCB)
SetGadgetColor(#Text_0, #PB_Gadget_BackColor, RGB(lCR, lCG, lCB))
StopDrawing()
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure setDrawArrow(lX.l, lY.l)
; ROUTINE DE TRACAGE DE LA BARRE DE PROGRESSION.
If lY = > #Color_spectre_XY
lY = #Color_spectre_XY - 1
EndIf
Box(lX, lY, 8, 3, $000000)
EndProcedure
Procedure setDrawLum()
; ROUTINE DE TRACAGE DE LA BARRE LUMIERE.
Define i.l
Define lCR.l
Define lCG.l
Define lCB.l
If StartDrawing(CanvasOutput(#Canvas_1))
Box(0, 0, #Color_spectre_XY + 2, #Color_spectre_XY + 2, $FFFFFF)
Box(0, 0, 20, #Color_spectre_XY + 2, $000000)
For i = 1 To #Color_spectre_XY
HLSToRGB(lCH, i, lCS, @lCR, @lCG, @lCB)
LineXY(1,(#Color_spectre_XY - i) + 1, 18,(#Color_spectre_XY - i) + 1, RGB(lCR, lCG, lCB))
Next i
setDrawArrow(22, #Color_spectre_XY - lCL)
HLSToRGB(lCH, lCL, lCS, @lCR, @lCG, @lCB)
SetGadgetColor(#Text_0, #PB_Gadget_BackColor, RGB(lCR, lCG, lCB))
StopDrawing()
EndIf
EndProcedure
Procedure DrawHSLText()
SetGadgetText(#String_0, Str(lCH))
SetGadgetText(#String_1, Str(lCS))
SetGadgetText(#String_2, Str(lCL))
EndProcedure
Procedure DrawRGBText()
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))
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Define event.l
Define evenp.l
Define eveng.l
Define lMosX.l
Define lMosY.l
Define lMosP.l
Define hWnd.l = OpenWindow(#Window_main, 0, 0, #Color_spectre_XY + 60, #Color_spectre_XY + 84, "Spectre des Coucleurs", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If hWnd <> 0
SmartWindowRefresh(#Window_main, 1)
CanvasGadget(#Canvas_0, 5, 5, #Color_spectre_XY + 2, #Color_spectre_XY + 2)
CanvasGadget(#Canvas_1, 270, 5, 30, #Color_spectre_XY + 2)
TextGadget(#Text_0, 5, 270, 100, 64, "", #PB_Text_Border)
TextGadget(#Text_1, 122, 270, 40, 20, "Teinte", #PB_Text_Right)
TextGadget(#Text_2, 122, 291, 40, 20, "Satur", #PB_Text_Right)
TextGadget(#Text_3, 122, 312, 40, 20, "Lum", #PB_Text_Right)
StringGadget(#String_0, 170, 270, 33, 20, "")
StringGadget(#String_1, 170, 291, 33, 20, "")
StringGadget(#String_2, 170, 312, 33, 20, "")
TextGadget(#Text_4, 210, 270, 40, 20, "Rouge", #PB_Text_Right)
TextGadget(#Text_5, 210, 291, 40, 20, "Vert", #PB_Text_Right)
TextGadget(#Text_6, 210, 312, 40, 20, "Bleu", #PB_Text_Right)
StringGadget(#String_3, 258, 270, 33, 20, "")
StringGadget(#String_4, 258, 291, 33, 20, "")
StringGadget(#String_5, 258, 312, 33, 20, "")
setGenerateStectre()
setDrawSpectre()
setDrawLum()
DrawHSLText()
DrawRGBText()
Define Retour_H, Retour_S, Retour_L, Retour_R, Retour_G, Retour_B
Retour_H = Val(GetGadgetText(#String_0))
Retour_S = Val(GetGadgetText(#String_1))
Retour_L = Val(GetGadgetText(#String_2))
Retour_R = Val(GetGadgetText(#String_3))
Retour_G = Val(GetGadgetText(#String_4))
Retour_B = Val(GetGadgetText(#String_5))
Repeat
event = WaitWindowEvent(20)
evenp = EventType()
eveng = EventGadget()
If event = #PB_Event_Gadget
Select eveng
Case #Canvas_0
If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas_0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
lMosX.l = GetGadgetAttribute(#Canvas_0, #PB_Canvas_MouseX)
lMosY.l = GetGadgetAttribute(#Canvas_0, #PB_Canvas_MouseY)
If lMosX < 0
lMosX = 0
Else
If lMosX > #Color_spectre_XY
lMosX = #Color_spectre_XY
EndIf
EndIf
If lMosY < 0
lMosY = 0
Else
If lMosY > #Color_spectre_XY
lMosY = #Color_spectre_XY
EndIf
EndIf
lCH = lMosX
lCS = #Color_spectre_XY - lMosY
setDrawSpectre()
setDrawLum()
DrawHSLText()
DrawRGBText()
Retour_H = Val(GetGadgetText(#String_0))
Retour_S = Val(GetGadgetText(#String_1))
Retour_L = Val(GetGadgetText(#String_2))
Retour_R = Val(GetGadgetText(#String_3))
Retour_G = Val(GetGadgetText(#String_4))
Retour_B = Val(GetGadgetText(#String_5))
EndIf
Case #Canvas_1
If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas_1, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
lMosY.l = GetGadgetAttribute(#Canvas_1, #PB_Canvas_MouseY)
If lMosY < 0
lMosY = 0
Else
If lMosY > #Color_spectre_XY
lMosY = #Color_spectre_XY
EndIf
EndIf
lCL = #Color_spectre_XY - lMosY
setDrawLum()
DrawHSLText()
DrawRGBText()
Retour_H = Val(GetGadgetText(#String_0))
Retour_S = Val(GetGadgetText(#String_1))
Retour_L = Val(GetGadgetText(#String_2))
Retour_R = Val(GetGadgetText(#String_3))
Retour_G = Val(GetGadgetText(#String_4))
Retour_B = Val(GetGadgetText(#String_5))
EndIf
Case #String_0
If evenp = #PB_EventType_Change
Retour_H = Val(GetGadgetText(#String_0))
If Retour_H < 0
Retour_H = 0
ElseIf Retour_H > 255
Retour_H = 255
EndIf
lCH = Retour_H
setDrawSpectre()
setDrawLum()
DrawRGBText()
ElseIf evenp = #PB_EventType_LostFocus
SetGadgetText(#String_0, Str(Retour_H))
EndIf
Case #String_1
If evenp = #PB_EventType_Change
Retour_S = Val(GetGadgetText(#String_1))
If Retour_S < 0
Retour_S = 0
ElseIf Retour_S > 255
Retour_S = 255
EndIf
lCS = Retour_S
setDrawSpectre()
setDrawLum()
DrawRGBText()
ElseIf evenp = #PB_EventType_LostFocus
SetGadgetText(#String_1, Str(Retour_S))
EndIf
Case #String_2
If evenp = #PB_EventType_Change
Retour_H = Val(GetGadgetText(#String_2))
If Retour_H < 0
Retour_H = 0
EndIf
If Retour_H > 255
Retour_H = 255
EndIf
lCL = Retour_H
setDrawSpectre()
setDrawLum()
DrawRGBText()
ElseIf evenp = #PB_EventType_LostFocus
SetGadgetText(#String_2, Str(Retour_L))
EndIf
Case #String_3
If evenp = #PB_EventType_Change
Retour_R = Val(GetGadgetText(#String_3))
If Retour_R < 0
Retour_R = 0
ElseIf Retour_R > 255
Retour_R = 255
EndIf
RGBToHLS(Retour_R, Retour_G, Retour_B, @lCH, @lCL, @lCS)
setDrawSpectre()
setDrawLum()
DrawHSLText()
ElseIf evenp = #PB_EventType_LostFocus
SetGadgetText(#String_3, Str(Retour_R))
EndIf
Case #String_4
If evenp = #PB_EventType_Change
Retour_G = Val(GetGadgetText(#String_4))
If Retour_G < 0
Retour_G = 0
ElseIf Retour_G > 255
Retour_G = 255
EndIf
RGBToHLS(Retour_R, Retour_G, Retour_B, @lCH, @lCL, @lCS)
setDrawSpectre()
setDrawLum()
DrawHSLText()
ElseIf evenp = #PB_EventType_LostFocus
SetGadgetText(#String_4, Str(Retour_G))
EndIf
Case #String_5
If evenp = #PB_EventType_Change
Retour_B = Val(GetGadgetText(#String_5))
If Retour_B < 0
Retour_B = 0
ElseIf Retour_B > 255
Retour_B = 255
EndIf
RGBToHLS(Retour_R, Retour_G, Retour_B, @lCH, @lCL, @lCS)
setDrawSpectre()
setDrawLum()
DrawHSLText()
ElseIf evenp = #PB_EventType_LostFocus
SetGadgetText(#String_5, Str(Retour_B))
EndIf
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
FreeImage(lImage)
EndIf
End
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.3
; Programmation : OK
; Programmé par : GallyHC
; Modifié par : Guimauve, Le Soldat Inconnu
; Date : 18-02-2012
; Mise à jour : 18-02-2012
; Codé pour PureBasic V4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Enumeration
#COLOR_SPECTRUM_TARGET_HUE
#COLOR_SPECTRUM_TARGET_LIGHTNESS
#COLOR_SPECTRUM_TARGET_SATURATION
#COLOR_SPECTRUM_TARGET_RED
#COLOR_SPECTRUM_TARGET_GREEN
#COLOR_SPECTRUM_TARGET_BLUE
#COLOR_SPECTRUM_TARGET_WIN_TITLE
#COLOR_SPECTRUM_TARGET_BTN_REFRESH
#COLOR_SPECTRUM_TARGET_BTN_VALIDATE
#COLOR_SPECTRUM_TARGET_BTN_CANCEL
EndEnumeration
#COLOR_SPECTRUM_SIZE_MAX = 255
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure ColorSpectrum
HLSRGB.l[6] ; Hue, Lightness, Saturation, Red, Green, Blue
SafeHLSRGB.l[6] ; SafeHue, SafeLightness, SafeSaturation, SafeRed, SafeGreen, SafeBlue
BackgroundLayer.l
SpectrumCanvas.l
LightnessCanvas.l
WindowHandle.l
Text.s[10]
TextHandle.l[7]
StringHandle.l[6]
ButtonHandle.l[3]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetColorSpectrumHLSRGB(ColorSpectrumA, HLSRGBID)
ColorSpectrumA\HLSRGB[HLSRGBID]
EndMacro
Macro GetColorSpectrumSafeHLSRGB(ColorSpectrumA, SafeHLSRGBID)
ColorSpectrumA\SafeHLSRGB[SafeHLSRGBID]
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 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 SetColorSpectrumHLSRGB(ColorSpectrumA, HLSRGBID, P_HLSRGB)
GetColorSpectrumHLSRGB(ColorSpectrumA, HLSRGBID) = P_HLSRGB
EndMacro
Macro SetColorSpectrumSafeHLSRGB(ColorSpectrumA, SafeHLSRGBID, P_SafeHLSRGB)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, SafeHLSRGBID) = P_SafeHLSRGB
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 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)
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)
SetColorSpectrumHLSRGB(ColorSpectrumA, StringHandleID, 0)
SetColorSpectrumSafeHLSRGB(ColorSpectrumA, StringHandleID, 0)
Next
For ButtonHandleID = 0 To 2
SetColorSpectrumButtonHandle(ColorSpectrumA, ButtonHandleID, 0)
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs spéciaux <<<<<
Macro GetColorSpectrumHue(ColorSpectrumA)
GetColorSpectrumHLSRGB(ColorSpectrumA, 0)
EndMacro
Macro GetColorSpectrumLightness(ColorSpectrumA)
GetColorSpectrumHLSRGB(ColorSpectrumA, 1)
EndMacro
Macro GetColorSpectrumSaturation(ColorSpectrumA)
GetColorSpectrumHLSRGB(ColorSpectrumA, 2)
EndMacro
Macro GetColorSpectrumRed(ColorSpectrumA)
GetColorSpectrumHLSRGB(ColorSpectrumA, 3)
EndMacro
Macro GetColorSpectrumGreen(ColorSpectrumA)
GetColorSpectrumHLSRGB(ColorSpectrumA, 4)
EndMacro
Macro GetColorSpectrumBlue(ColorSpectrumA)
GetColorSpectrumHLSRGB(ColorSpectrumA, 5)
EndMacro
Macro GetColorSpectrumSafeHue(ColorSpectrumA)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, 0)
EndMacro
Macro GetColorSpectrumSafeLightness(ColorSpectrumA)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, 1)
EndMacro
Macro GetColorSpectrumSafeSaturation(ColorSpectrumA)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, 2)
EndMacro
Macro GetColorSpectrumSafeRed(ColorSpectrumA)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, 3)
EndMacro
Macro GetColorSpectrumSafeGreen(ColorSpectrumA)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, 4)
EndMacro
Macro GetColorSpectrumSafeBlue(ColorSpectrumA)
GetColorSpectrumSafeHLSRGB(ColorSpectrumA, 5)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetColorSpectrumHue(ColorSpectrumA, P_Hue)
GetColorSpectrumHue(ColorSpectrumA) = P_Hue
EndMacro
Macro SetColorSpectrumLightness(ColorSpectrumA, P_Lightness)
GetColorSpectrumLightness(ColorSpectrumA) = P_Lightness
EndMacro
Macro SetColorSpectrumSaturation(ColorSpectrumA, P_Saturation)
GetColorSpectrumSaturation(ColorSpectrumA) = P_Saturation
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 SetColorSpectrumSafeLightness(ColorSpectrumA, P_SafeLightness)
GetColorSpectrumSafeLightness(ColorSpectrumA) = P_SafeLightness
EndMacro
Macro SetColorSpectrumSafeSaturation(ColorSpectrumA, P_SafeSaturation)
GetColorSpectrumSafeSaturation(ColorSpectrumA) = P_SafeSaturation
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.014 secondes (26000.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Macro FormatColorSpectrumRGB(ColorSpectrumA)
"RGB(" + Str(GetColorSpectrumRed(ColorSpectrumA)) + ", " + Str(GetColorSpectrumGreen(ColorSpectrumA)) + ", " + Str(GetColorSpectrumBlue(ColorSpectrumA)) + ")"
EndMacro
Macro FormatColorSpectrumHLS(ColorSpectrumA)
"HLS(" + Str(GetColorSpectrumHue(ColorSpectrumA)) + ", " + Str(GetColorSpectrumLightness(ColorSpectrumA)) + ", " + Str(GetColorSpectrumSaturation(ColorSpectrumA)) + ")"
EndMacro
Macro ColorSpectrum_RGB(ColorSpectrumA)
(GetColorSpectrumBlue(ColorSpectrumA) << 16 + GetColorSpectrumGreen(ColorSpectrumA) << 8 + GetColorSpectrumRed(ColorSpectrumA))
EndMacro
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)
SetColorSpectrumLightness(*ColorSpectrumA, 127)
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_HUE, "Teinte")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_LIGHTNESS, "Luminosité")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_SATURATION, "Saturation")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_RED, "Rouge")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_GREEN, "Vert")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BLUE, "Bleu")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_WIN_TITLE, "Spectre de couleurs")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_REFRESH, "Rafraichir")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_VALIDATE, "Valider")
SetColorSpectrumText(*ColorSpectrumA, #COLOR_SPECTRUM_TARGET_BTN_CANCEL, "Annuler")
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 ColorSpectrum_RGB_To_HLS(*ColorSpectrumA.ColorSpectrum)
; ROUTINE DE CONSERTION DU RGB EN HLS.
MinMaxNumber(Min.l, Max.l, GetColorSpectrumRed(*ColorSpectrumA), GetColorSpectrumGreen(*ColorSpectrumA), GetColorSpectrumBlue(*ColorSpectrumA))
DeltaMaxMin.l = Max - Min
SumMaxMin.l = Max + Min
LightnessColor.f = SumMaxMin / 510
If Max = Min
HueColor.f = 0
SaturationColor.f = 0
Else
NormalizedRed = (Max - GetColorSpectrumRed(*ColorSpectrumA)) / DeltaMaxMin
NormalizedGreen = (Max - GetColorSpectrumGreen(*ColorSpectrumA)) / DeltaMaxMin
NormalizedBlue = (Max - GetColorSpectrumBlue(*ColorSpectrumA)) / DeltaMaxMin
If LightnessColor <= 0.5
SaturationColor = DeltaMaxMin / SumMaxMin
Else
SaturationColor = DeltaMaxMin / (510 - SumMaxMin)
EndIf
If GetColorSpectrumRed(*ColorSpectrumA) = Max
HueColor = 60 * (6 + NormalizedBlue - NormalizedGreen)
EndIf
If GetColorSpectrumGreen(*ColorSpectrumA) = Max
HueColor = 60 * (2 + NormalizedRed - NormalizedBlue)
EndIf
If GetColorSpectrumBlue(*ColorSpectrumA) = Max
HueColor = 60 * (4 + NormalizedGreen - NormalizedRed)
EndIf
EndIf
If HueColor = 360
HueColor = 0
EndIf
SetColorSpectrumHue(*ColorSpectrumA, Int((HueColor / 360 * #COLOR_SPECTRUM_SIZE_MAX)))
SetColorSpectrumLightness(*ColorSpectrumA, Int(LightnessColor * #COLOR_SPECTRUM_SIZE_MAX))
SetColorSpectrumSaturation(*ColorSpectrumA, Int(SaturationColor * #COLOR_SPECTRUM_SIZE_MAX))
EndProcedure
Procedure ColorSpectrum_HLS_To_RGB(HueColor.f, LightnessColor.f, SaturationColor.f, *ColorSpectrumA.ColorSpectrum)
; ROUTINE DE CONSERTION DU HLS EN RGB.
HueColor = HueColor * 360 / #COLOR_SPECTRUM_SIZE_MAX
LightnessColor = LightnessColor / #COLOR_SPECTRUM_SIZE_MAX
SaturationColor = SaturationColor / #COLOR_SPECTRUM_SIZE_MAX
If SaturationColor = 0.0
SetColorSpectrumRed(*ColorSpectrumA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorSpectrumGreen(*ColorSpectrumA, LightnessColor * #COLOR_SPECTRUM_SIZE_MAX)
SetColorSpectrumBlue(*ColorSpectrumA, 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
SetColorSpectrumRed(*ColorSpectrumA, Private_ConvertRm(M1, M2, HueColor + 120))
SetColorSpectrumGreen(*ColorSpectrumA, Private_ConvertRm(M1, M2, HueColor))
SetColorSpectrumBlue(*ColorSpectrumA, 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
ColorSpectrum_HLS_To_RGB(HueID, #COLOR_SPECTRUM_SIZE_MAX / 2, SaturationID, *ColorSpectrumA)
Plot(HueID, (#COLOR_SPECTRUM_SIZE_MAX - SaturationID) + 1, ColorSpectrum_RGB(*ColorSpectrumA))
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
PosY = #COLOR_SPECTRUM_SIZE_MAX - GetColorSpectrumLightness(*ColorSpectrumA)
If PosY => #COLOR_SPECTRUM_SIZE_MAX
PosY = #COLOR_SPECTRUM_SIZE_MAX - 1
EndIf
Box(22, PosY, 8, 3, 0)
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)
ColorSpectrum_HLS_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA),GetColorSpectrumSaturation(*ColorSpectrumA), *ColorSpectrumA)
StopDrawing()
SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, ColorSpectrum_RGB(*ColorSpectrumA))
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, $FFFFFF)
Box(0, 0, 20, #COLOR_SPECTRUM_SIZE_MAX + 2, $000000)
For LightnessID = 1 To #COLOR_SPECTRUM_SIZE_MAX
ColorSpectrum_HLS_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), LightnessID, GetColorSpectrumSaturation(*ColorSpectrumA), *ColorSpectrumA)
LineXY(1, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, 18, (#COLOR_SPECTRUM_SIZE_MAX - LightnessID) + 1, ColorSpectrum_RGB(*ColorSpectrumA))
Next
SetColorSpectrumLightness(*ColorSpectrumA, CurrentLightness)
ColorSpectrum_DrawArrow(*ColorSpectrumA.ColorSpectrum)
ColorSpectrum_HLS_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), *ColorSpectrumA)
SetGadgetColor(GetColorSpectrumTextHandle(*ColorSpectrumA, 06), #PB_Gadget_BackColor, ColorSpectrum_RGB(*ColorSpectrumA))
StopDrawing()
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 RefeshHLSColorOutput <<<<<
Procedure RefreshHLSColorOutput(*ColorSpectrumA.ColorSpectrum)
For Index = 0 To 2
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHLSRGB(*ColorSpectrumA, Index)))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefeshRGBColorOutput <<<<<
Procedure RefreshRGBColorOutput(*ColorSpectrumA.ColorSpectrum)
ColorSpectrum_HLS_To_RGB(GetColorSpectrumHue(*ColorSpectrumA), GetColorSpectrumLightness(*ColorSpectrumA), GetColorSpectrumSaturation(*ColorSpectrumA), *ColorSpectrumA)
For Index = 3 To 5
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index), Str(GetColorSpectrumHLSRGB(*ColorSpectrumA, Index)))
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchRGBColorInput <<<<<
Procedure CatchRGBColorInput(*ColorSpectrumA.ColorSpectrum)
For Index = 3 To 5
SetColorSpectrumHLSRGB(*ColorSpectrumA, Index, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Index))))
Next
ColorSpectrum_RGB_To_HLS(*ColorSpectrumA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur CatchSafeHLSRGB <<<<<
Procedure CatchSafeHLSRGB(*ColorSpectrumA.ColorSpectrum)
For SafeHLSRGBID = 0 To 5
SetColorSpectrumSafeHLSRGB(*ColorSpectrumA, SafeHLSRGBID, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, SafeHLSRGBID))))
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)
RefreshHLSColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHLSRGB(*ColorSpectrumA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrum_SpectrumCanvas_EventManager <<<<<
Procedure ColorSpectrum_SpectrumCanvas_EventManager(*ColorSpectrumA.ColorSpectrum)
EventType = EventType()
If evenp = #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)
RefreshHLSColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHLSRGB(*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)
RefreshHLSColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHLSRGB(*ColorSpectrumA)
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Hue Input Control <<<<<
Procedure ColorSpectrum_Input_Control(*ColorSpectrumA.ColorSpectrum, Target.b)
EventType = EventType()
If EventType = #PB_EventType_Change
SetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target, Val(GetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target))))
If GetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target) < 0
SetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target, 0)
EndIf
If GetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target) > 255
SetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target, 255)
EndIf
Select Target
Case #COLOR_SPECTRUM_TARGET_HUE, #COLOR_SPECTRUM_TARGET_LIGHTNESS, #COLOR_SPECTRUM_TARGET_SATURATION
SetColorSpectrumHLSRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target))
Case #COLOR_SPECTRUM_TARGET_RED, #COLOR_SPECTRUM_TARGET_GREEN, #COLOR_SPECTRUM_TARGET_BLUE
SetColorSpectrumHLSRGB(*ColorSpectrumA, Target, GetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target))
ColorSpectrum_RGB_To_HLS(*ColorSpectrumA)
EndSelect
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHLSColorOutput(*ColorSpectrumA)
ElseIf EventType = #PB_EventType_LostFocus
SetGadgetText(GetColorSpectrumStringHandle(*ColorSpectrumA, Target), Str(GetColorSpectrumSafeHLSRGB(*ColorSpectrumA, Target)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ColorSpectrumRequester <<<<<
Procedure.l ColorSpectrumRequester(*ColorSpectrumA.ColorSpectrum)
SetColorSpectrumWindowHandle(*ColorSpectrumA, OpenWindow(#PB_Any, 0, 0, #COLOR_SPECTRUM_SIZE_MAX + 55, #COLOR_SPECTRUM_SIZE_MAX + 140, GetColorSpectrumText(*ColorSpectrumA, 06), #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, 30, #COLOR_SPECTRUM_SIZE_MAX + 2))
SetColorSpectrumTextHandle(*ColorSpectrumA, 6, TextGadget(#PB_Any, 5, 270, 80, 84, "", #PB_Text_Border))
PosX = 10
PosY = 270
For Index = 0 To 2
SetColorSpectrumTextHandle(*ColorSpectrumA, Index, TextGadget(#PB_Any, 102, PosY, 70, 25, GetColorSpectrumText(*ColorSpectrumA, Index), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index, StringGadget(#PB_Any, 180, PosY, 33, 25, ""))
SetColorSpectrumTextHandle(*ColorSpectrumA, Index + 3, TextGadget(#PB_Any, 220, PosY, 40, 25, GetColorSpectrumText(*ColorSpectrumA, Index + 3), #PB_Text_Right))
SetColorSpectrumStringHandle(*ColorSpectrumA, Index + 3, StringGadget(#PB_Any, 270, PosY, 33, 25, ""))
SetColorSpectrumButtonHandle(*ColorSpectrumA, Index, ButtonGadget(#PB_Any, PosX, 360, 95, 30, GetColorSpectrumText(*ColorSpectrumA, Index + 7)))
PosX + 100
PosY + 30
Next
GenerateColorSpectrumBackgroundLayer(*ColorSpectrumA)
ColorSpectrum_SpectrumRedraw(*ColorSpectrumA)
ColorSpectrum_LightnessRedraw(*ColorSpectrumA)
RefreshHLSColorOutput(*ColorSpectrumA)
RefreshRGBColorOutput(*ColorSpectrumA)
CatchSafeHLSRGB(*ColorSpectrumA)
Repeat
EventID = WaitWindowEvent(20)
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)
ReturnSelectedColor = -1
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)
If Color <> -1
Debug "RGB(" + Str(Red(Color)) + ", " + Str(Green(Color)) + ", " + Str(Blue(Color)) + ")"
Else
Debug "Lutilisateur à annuler la sélection de la couleur"
EndIf
ResetColorSpectrum(ColorSpectrum)
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Tu veux dire une couleur par défaut comme dans le cas du ColorRequester() ou les valeurs pour les paramètres HLS et RGB ?Le Soldat Inconnu a écrit :@Guimauve : il ne manque que le passage de couleur en paramètre, et ma modif