bref un truc qui me permet de choisir une couleur ... pas trouvé !
mais ... notre ami Nico, m'a rappelé que c'etait pas au niveau gadget, qu'il fallait chercher, mais
au niveau Requester ... hum ... ha bah oui .. c'est bien un requester
mais moi, c'est une palette que je veux , un truc coloré, qui puisse s'afficher dans une application Graphique
pas un truc en boite qu'on appel a la demande (Merci Fred .. .... t'a remarqué; c'est ta fete avec moi )
bon alors, j'ai décidé de faire un Gadget palette , un truc coloré que tu peux poser ou tu veux dans ton application Fenêtré
bref , un Vrais Gadget
le truc qu'il faut retenir , c'est que mon Gadget Palette se compose de 2 fonctions
une fonction pour le dessin du gadget :
Palette_gadget(num,x,y) ;Palette_gadget(numero du gadget,x,y,cadre)
une fonction pour la gestion des Event , qu'il faut délicatement poser dans la boucle D'event
event_palette_gadget(num) ; event_palette_gadget(Event, numero du gadget)
voici le code Exemple , ... le truc coloré au milieu c'est le gadget
un click dessus, ça renvoi la couleur choisie
pour la petite histoire, je ne suis pas sur de générer toutes les couleurs ... mais l'essentiel y est
si vous voulez, vous pouvez toujours modifier les teintes a coup de "GradientColor()"
ce qui permettrait d'avoir plusieurs gadget palette, avec chacun un dégradé par couleur (les bleus, les vert,les rouges etc ... )
faites en bonne usage
Code : Tout sélectionner
;***********************************************
;Titre :*Palette_gadget
;Auteur : Dobro
; Collaboration : Ar-s
;Date :15/06/2014
;Heure :18:46:29
;Version Purebasic : PureBasic 5.22 LTS (Windows - x86)
;Version de l'editeur :EPB V2.54
; Libairies necessaire : Aucune
;***********************************************
;}
Declare.l event_palette_gadget(num) ; a Mettre en Boucle principal
Declare Palette_gadget(num,x,y,cadre=0,titre$=""); a Mettre apres Openwindow()
;{- ***** initialisation du gadget Palette ******************
Structure Pal ; initialisation du gadget palette
Couleur_hex.s ; pour la couleur Hexa
Couleur.i ; la couleur
Rouge.i ; composante rouge
Vert.i ; composante Verte
Bleu.i ;composante bleu
EndStructure
Global Dim Pal.Pal(10) ; valable pour 10 gadget palettes
Global Fnt=LoadFont (#Pb_any, "Arial", 6)
;} ****************************************************
Enumeration
#palette
#palette2
EndEnumeration
If OpenWindow(0, 0, 0, 800, 600, "Pick_color", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Palette_gadget(#palette,20,10,0) ; dessin du gadget palette sans cadre
Palette_gadget(#palette2,20,300,1,"Palette By Dobro") ; dessin du gadget palette Avec cadre
Repeat
Event = WaitWindowEvent(2)
Select Event
Case #PB_Event_Gadget
select EventGadget()
case #palette
retour=event_palette_gadget(#palette) ; envoi l'event au gadget Palette , qui retourne la couleur choisie dans la Structure
if retour<>-1
debug "couleur Palette 1="+ Pal(#palette)\couleur.i; affiche la couleur de la Structure
debug "composante Palette 1= "+"Rouge "+Pal(#palette)\rouge.i+" Vert "+Pal(#palette)\vert.i+" Bleu "+Pal(#palette)\bleu.i ; retourne les composantes de la couleur choisie, present dans la structure
Debug "retour de la couleur en Hexa :" +Pal(#palette)\Couleur_hex.s
Debug " ************************************************************************"
Endif
case #palette2
retour=event_palette_gadget(#palette2) ; envoi l'event au gadget Palette , qui retourne la couleur choisie dans la Structure
if retour<>-1
debug "couleur Palette 2="+ Pal(#palette2)\couleur.i; affiche la couleur de la Structure
debug "composante Palette 2= "+"Rouge "+Pal(#palette2)\rouge.i+" Vert "+Pal(#palette2)\vert.i+" Bleu "+Pal(#palette2)\bleu.i ; affiche les composantes de la couleur choisie, present dans la structure
Debug "retour de la couleur en Hexa :" +Pal(#palette2)\Couleur_hex.s
Debug " ************************************************************************"
Endif
Endselect
Endselect
Until Event = #PB_Event_CloseWindow
Endif
;-** Zone Procedure ***************
Procedure.l event_palette_gadget(num) ; event_palette_gadget(numero du gadget)
;By Dobro modif d'Ar-S
; retourne la couleur choisie
Static Flag_c ,mem_Flag_c
Select EventType()
Case #PB_EventType_MouseEnter, #PB_EventType_MouseMove
Capture = 1
x1 = GetGadgetAttribute(num, #PB_Canvas_MouseX)
y1 = GetGadgetAttribute(num, #PB_Canvas_MouseY)
If StartDrawing(CanvasOutput(num))
If (x1 >= 0 And x1 <=255) And (y1 >=0 And y1 <=275)
Pal(num)\Couleur.i = Point(x1,y1)
Box (257,0,20,128,Pal(num)\Couleur.i)
Flag_c=Pal(num)\couleur.i
if mem_Flag_c<>Flag_c
h$=RSet (Hex(Red(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Green(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Blue(Pal(num)\couleur.i)),2,"0")
DrawingFont(FontID(Fnt))
DrawText( 160,256, Space(32) )
DrawText( 160,256, "Hex : "+ h$ )
DrawText( 160,266, Space(32) )
DrawText( 160,266, "R : "+Red(Pal(num)\couleur.i)+" V:"+Green(Pal(num)\couleur.i)+" B:"+Blue(Pal(num)\couleur.i) )
mem_Flag_c=Flag_c
Endif
EndIf
StopDrawing()
;ProcedureReturn
EndIf
Case #PB_EventType_LeftClick
Capture = 0
;-***** pointage souris ************
x1 = GetGadgetAttribute(num, #PB_Canvas_MouseX)
y1 = GetGadgetAttribute(num, #PB_Canvas_MouseY)
; ********************************
If StartDrawing(CanvasOutput(num))
If (x1 >= 0 And x1 <=255) And (y1 >=0 And y1 <=275)
Pal(num)\Couleur.i = Point(x1,y1)
Box (257,129,20,128,Pal(num)\Couleur.i)
; met les composantes dans la structure
Pal(num)\rouge.i=Red(Pal(num)\Couleur.i)
Pal(num)\vert.i=Green(Pal(num)\Couleur.i)
Pal(num)\bleu.i=Blue(Pal(num)\Couleur.i)
; //Ajout Ar-S 21/06/14 - 17h06//
Pal(num)\Couleur_hex.s = RSet (Hex(Red(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Green(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Blue(Pal(num)\couleur.i)),2,"0") ; met la couleur Hex dans la structure
EndIf
StopDrawing()
ProcedureReturn
EndIf
Default
Capture = 0
EndSelect
ProcedureReturn -1
EndProcedure
Procedure Palette_gadget(num,x,y,cadre=0,titre$="");Palette_gadget(numero du gadget,x,y,largeur,hauteur)
; By Dobro
; Affiche le Gadget Palette
Larg=276 :haut=276
if cadre=1
FrameGadget(#PB_Any, x-5, y-15, Larg+15, Haut+20, titre$)
Endif
CanvasGadget(num, x,y,larg,haut)
If StartDrawing(CanvasOutput(num))
;{ Palette Dobro
; rouge=0
; vert=0
; bleu=0
; DrawingMode(#PB_2DDrawing_Gradient)
; BackColor(rgb(0,0,0))
; for y=0 to 255
; ;for x=0 to 255
; GradientColor(0.1, rgb(0,0,0)) ; rouge
; GradientColor(0.2, rgb(y,0,0)) ; rouge
; GradientColor(0.3, rgb(y,y,0)) ; jaune
; GradientColor(0.4, rgb(0,y,0)) ; vert
; GradientColor(0.5, rgb(0,y,y)) ; cyan
; GradientColor(0.6, rgb(0,0,y)) ; bleu
; GradientColor(0.7, rgb(y,0,y)) ; violet
; GradientColor(0.8, rgb(y,0,0)) ; rouge
; GradientColor(0.9, rgb(0,0,0)) ; noir
; GradientColor(1.0, rgb(255,255,255)) ; blanc
; LinearGradient(0, 0, 255, 0)
; box(0, y, 255,y)
;
; ;Next x
; Next y
; FrontColor(rgb(255,255,255))
;}
;{ Palette Graph100
For y=0 to 255
For x=0 to 255
abscisse.f=x:Ordonne.f=y: max.f=256: maxY.f=256
Protected couleur, taux.f, index1.f, index2.f, index3.f, index4.f, index5.f
index1.f = max / 6
index2.f = 2 * max / 6
index3.f = 3 * max / 6
index4.f = 4 * max / 6
index5.f = 5 * max / 6
If Ordonne * 2 / maxY > 1
abscisse - index1
If abscisse < 0 : abscisse + max : EndIf
EndIf
If abscisse >= 0 And abscisse <= index1
couleur = RGB(255, (((abscisse * max) / index1) * 255) / max, 0)
EndIf
If abscisse > index1 And abscisse <= index2
couleur = RGB(((max - ((abscisse - index1) * max) / index1) * 255) / max, 255, 0)
EndIf
If abscisse > index2 And abscisse <= index3
couleur = RGB(0, 255, ((((abscisse - index2) * max) / index1) * 255) / max)
EndIf
If abscisse > index3 And abscisse <= index4
couleur = RGB(0, ((max - ((abscisse - index3) * max) / index1) * 255) / max, 255)
EndIf
If abscisse > index4 And abscisse <= index5
couleur = RGB(((abscisse - index4) * 255) / index1, 0, 255)
EndIf
If abscisse > index5 And abscisse <= max
couleur = RGB(255, 0, ((max - ((abscisse - index5) * max) / index1) * 255) / max)
EndIf
taux.f = Ordonne * 2 / maxY
If taux <= 1
couleur = RGB(taux * Red(couleur), taux * Green(couleur), taux * Blue(couleur))
Else
taux - 2
couleur = RGB(255 + taux * Green(couleur), 255 + taux * Blue(couleur), 255 + taux * Red(couleur))
EndIf
x1=x+1
y1=y+1
if x1>255:x1=255:endif
if y1>255:y1=255:endif
plot(x1,y1,couleur)
Next x
Next y
xb=0
Box(xb,256,20,20,rgb(0,0,0))
xb=xb+20
Box(xb,256,20,20,rgb(255,255,255))
xb=xb+20
Box(xb,256,20,20,rgb(255,0,0))
xb=xb+20
Box(xb,256,20,20,rgb(255,255,0))
xb=xb+20
Box(xb,256,20,20,rgb(0,255,0))
xb=xb+20
Box(xb,256,20,20,rgb(0,255,255))
xb=xb+20
Box(xb,256,20,20,rgb(0,0,255))
xb=xb+20
Box(xb,256,20,20,rgb(255,0,255))
;}
StopDrawing()
EndIf
Endprocedure
;
; Epb