Routine Spectre des couleurs Style Windows
Re: Routine Spectre des couleurs Style Windows
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
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
Il ne faut refaire toujours tout tes calculs.
Soit tu écrit du RGB et tu calcules uniquement le HLS, et tu changes le contenu des gadgets HLS uniquement pour ne pas perdre le focus en cours de frappe
Soit tu écrit du HLS et tu calcules uniquement le RGB, et tu changes le contenu des gadgets RGB uniquement pour ne pas perdre le focus en cours de frappe
Sinon, ça se mord la queue car les erreurs de calculs de la conversion en HLS sont répercutées sur le RGB que l'on est en train d'écrire (sans parler de la perte de focus)
Soit tu écrit du RGB et tu calcules uniquement le HLS, et tu changes le contenu des gadgets HLS uniquement pour ne pas perdre le focus en cours de frappe
Soit tu écrit du HLS et tu calcules uniquement le RGB, et tu changes le contenu des gadgets RGB uniquement pour ne pas perdre le focus en cours de frappe
Sinon, ça se mord la queue car les erreurs de calculs de la conversion en HLS sont répercutées sur le RGB que l'on est en train d'écrire (sans parler de la perte de focus)
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
Bonjour,
Voila j'ai mis a jour le code et merci Le Soldat Inconnu, j'ai suivi tes conseils.
Cordialement,
GallyHC
Voila j'ai mis a jour le code et merci Le Soldat Inconnu, j'ai suivi tes conseils.
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
J'ai aussi mis le code sur mon site si cela interresse quelqu'un 
http://koakdesign.info/news/?url=4d&val=44
Cordialement,
GallyHC

http://koakdesign.info/news/?url=4d&val=44
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
Plus bcp de retours 

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
C'est du bon boulot , ca marche très bien sous Linux. 

Re: Routine Spectre des couleurs Style Windows
joli code , Merci 

Re: Routine Spectre des couleurs Style Windows
oui ça fonctionne très bien. Bravo
J'ai pas yeuter le code mais tu la mis en ligne c'est cool merci.
@++
J'ai pas yeuter le code mais tu la mis en ligne c'est cool merci.
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Routine Spectre des couleurs Style Windows
testé et approuvé 

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Routine Spectre des couleurs Style Windows
Allez, encore une petite amélioration. Je trouve ça stressant de voir ma valeur forcé à 255 avant que j'ai finis de rentrer ma valeur.
donc si il y a écrit 210 et que je tape 1210, ça reste affiché 1210 mais le programme travail avec 255. Je finis de taper en effaçant le 0 à la fin et j'ai mon 121 qui est pris en compte.
Autre cas, je tape 540, le programme travail avec 255 et quand je quitte la zone de texte, le texte devient 255;
C'est plus sympa pour l'utilisateur
donc si il y a écrit 210 et que je tape 1210, ça reste affiché 1210 mais le programme travail avec 255. Je finis de taper en effaçant le 0 à la fin et j'ai mon 121 qui est pris en compte.
Autre cas, je tape 540, le programme travail avec 255 et quand je quitte la zone de texte, le texte devient 255;
C'est plus sympa pour l'utilisateur
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
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
Bonjour,
Merci a tous
et merci pour cette modif "Le Soldat Inconnu" approuvé pour ma part 
Cordialement,
GallyHC
Merci a tous


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 à tous,
Voici ma version de ce système de sélection de couleur. En gros, j'ai viré les variables globales, les énumérations de constantes pour la fenêtre et les gadgets, ajouter des boutons de contrôle (Rafraîchir, Valider, Annuler) et j'ai centralisé les informations importantes dans une structure de donnée.
Édit 1 :
Ajout de constantes pour la désignation des targets
Correction de la commande Refresh
Édit 2 :
Nouvelle correction, j'avais mal implémenté la solution proposée par Le Soldat Inconnu, Maintenant ça fonctionne
Désolé pour ceux qui l'on déjà téléchargé
Édit 3 :
Code supprimé, recherche de bogue en cours.
Édit 4 :
Remise en place du code corrigé:
A+
Guimauve
Voici ma version de ce système de sélection de couleur. En gros, j'ai viré les variables globales, les énumérations de constantes pour la fenêtre et les gadgets, ajouter des boutons de contrôle (Rafraîchir, Valider, Annuler) et j'ai centralisé les informations importantes dans une structure de donnée.
Édit 1 :
Ajout de constantes pour la désignation des targets
Correction de la commande Refresh
Édit 2 :
Nouvelle correction, j'avais mal implémenté la solution proposée par Le Soldat Inconnu, Maintenant ça fonctionne
Désolé pour ceux qui l'on déjà téléchargé
Édit 3 :
Code supprimé, recherche de bogue en cours.
Édit 4 :
Remise en place du code corrigé:
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.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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Dernière modification par Guimauve le sam. 18/févr./2012 20:39, modifié 5 fois.
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Routine Spectre des couleurs Style Windows
@Guimauve : il ne manque que le passage de couleur en paramètre, et ma modif 

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
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
En passant, j'ai mis le code source plus haut à jour quelques fois aujourd'hui, désolé pour les nombreuses modifications.
A+
Guimauve
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Routine Spectre des couleurs Style Windows
Oui, la couleur de départ 

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)]