Re: un Gadget Palette ....un ...
Publié : ven. 20/juin/2014 8:12
Moi aussi, merci Ar-s pour ce partageDobro a écrit :bonne idée , j'adopte
Forums PureBasic - Français
http://forums.purebasic.com/french/
Moi aussi, merci Ar-s pour ce partageDobro a écrit :bonne idée , j'adopte
Code : Tout sélectionner
Declare.l event_palette_gadget(num) ; event_palette_gadget(numero du gadget)
Declare Palette_gadget(num,x,y,cadre);Palette_gadget(numero du gadget,x,y,largeur,hauteur)
Declare Round2(Number.f)
Declare.f Min(val_1.f,val_2.f,val_3.f)
Declare.f Max(val_1.f,val_2.f,val_3.f)
Declare TSL_RGB(Hue.f,Saturation.f,Brightness.f)
Enumeration
#palette
EndEnumeration
If OpenWindow(0, 0, 0, 315,310, "Pick_color", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Palette_gadget(#palette,20,10,0) ; dessin du gadget palette sans cadre
Repeat
Event = WaitWindowEvent(2)
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #palette
couleur=event_palette_gadget(#palette) ; envoi l'event au gadget Palette , qui retourne la couleur choisie
If couleur<>-1
Debug "couleur Palette 1= "+"Rouge "+Red(couleur)+" Vert "+Green(couleur)+" Bleu "+Blue(couleur)
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
;******* Zone Procedure ***************
Procedure.l event_palette_gadget(num) ; event_palette_gadget(numero du gadget)
If EventType() = #PB_EventType_LeftButtonDown ;Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(num, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
x1 = GetGadgetAttribute(num, #PB_Canvas_MouseX)
y1 = GetGadgetAttribute(num, #PB_Canvas_MouseY)
If StartDrawing(CanvasOutput(num))
If (x1 >= 1 And x1 <=257) And (y1 >1 And y1 <=258)
couleur = Point(x1,y1)
Box (266,1,20,259,couleur)
Beep_(1600,50)
DrawText(15,268,"FFFFFFFFFF",RGB(255,255,255),RGB(255,255,255))
DrawText(15,268,"$"+Hex(couleur),RGB(0,0,0),RGB(255,255,255))
EndIf
StopDrawing()
ProcedureReturn couleur
EndIf
EndIf
ProcedureReturn -1
EndProcedure
Procedure Palette_gadget(num,x,y,cadre);Palette_gadget(numero du gadget,x,y,largeur,hauteur)
Larg=276 :haut=276+15
CanvasGadget(num, x,y,larg,haut)
If StartDrawing(CanvasOutput(num))
Box(1,0,258,260,RGB(100,220,255))
Box(2,1,256,1,RGB(0,0,0))
Box(2,258,256,1,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+1,y1+1,couleur)
Next x
Next y
; ;}
StopDrawing()
EndIf
EndProcedure
Code : Tout sélectionner
DrawText(15,268,"$"+RSet(Hex(couleur),6,"0"),RGB(0,0,0),RGB(255,255,255))
SPH a écrit :Cette histoire de noir et blanc pur manquant m'a travaillé.
La frame3D et le titre n'ont pas vraiment d’intérêt, il vaut mieux ouvrir le canvas avec ou sans sa bordure vu qu'il peut en avoir une nativement.Dobro a écrit :arf !!
changement de code, j'ai ajouté les options "Cadre" et titre_de_cadre" en parametres optionnel
Merci
Code : Tout sélectionner
Palette_gadget(#palette,20,10) ; dessin du gadget palette sans cadre
Palette_gadget(#palette2,20,300,1) ; dessin du gadget palette sans cadre
Code : Tout sélectionner
;***********************************************
;Titre :*Palette_gadget
;Auteur : Dobro
;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) ; event_palette_gadget(numero du gadget)
; Ajout Ar-S cadre = 0
Declare Palette_gadget(num,x,y,cadre=0);Palette_gadget(numero du gadget,x,y,largeur,hauteur)
Enumeration
#palette
#palette2
EndEnumeration
If OpenWindow(0, 0, 0, 800, 600, "Pick_color", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Palette_gadget(#palette,20,10) ; dessin du gadget palette sans cadre
Palette_gadget(#palette2,20,300,1) ; dessin du gadget palette sans cadre
Repeat
Event = WaitWindowEvent(2)
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #palette
couleur=event_palette_gadget(#palette) ; envoi l'event au gadget Palette , qui retourne la couleur choisie
If couleur<>-1
Debug "couleur Palette 1= "+"Rouge "+Red(couleur)+" Vert "+Green(couleur)+" Bleu "+Blue(couleur)
EndIf
Case #palette2
couleur=event_palette_gadget(#palette2) ; envoi l'event au gadget Palette , qui retourne la couleur choisie
If couleur<>-1
Debug "couleur Palette 1= "+"Rouge "+Red(couleur)+" Vert "+Green(couleur)+" Bleu "+Blue(couleur)
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
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)
couleur = Point(x1,y1)
Box (257,0,20,128,couleur)
EndIf
StopDrawing()
EndIf
Case #PB_EventType_LeftClick
Capture = 0
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)
couleur = Point(x1,y1)
Box (257,129,20,128,couleur)
EndIf
StopDrawing()
; //Ajout Ar-S 21/06/14 - 17h06//
HexColor$ = RSet (Hex(Red(couleur)),2,"0") + RSet (Hex(Green(couleur)),2,"0") + RSet (Hex(Blue(couleur)),2,"0")
GadgetToolTip(num, "RGB Hex : #"+ HexColor$ + " copiée dans le presse papier.")
SetClipboardText( HexColor$ )
; //////////
ProcedureReturn couleur
EndIf
Default
Capture = 0
EndSelect
ProcedureReturn -1
EndProcedure
Procedure Palette_gadget(num,x,y,cadre=0);Palette_gadget(numero du gadget,x,y,largeur,hauteur)
; By Dobro
; Affiche le Gadget Palette
Larg=276 :haut=276
If cadre = 1
style = #PB_Canvas_Border
Else
style = 0
EndIf
CanvasGadget(num, x,y,larg,haut, style)
If StartDrawing(CanvasOutput(num))
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+20
Box(xb,256,20,20,RGB(255,255,255))
xb+20
Box(xb,256,20,20,RGB(255,0,0))
xb+20
Box(xb,256,20,20,RGB(255,255,0))
xb+20
Box(xb,256,20,20,RGB(0,255,0))
xb+20
Box(xb,256,20,20,RGB(0,255,255))
xb+20
Box(xb,256,20,20,RGB(0,0,255))
xb+20
Box(xb,256,20,20,RGB(255,0,255))
;}
StopDrawing()
EndIf
EndProcedure
; Epb
si , car le but finalement n'est pas tant de delimiter la palette que de lui attribuer un titreAr-S a écrit : La frame3D et le titre n'ont pas vraiment d’intérêt,
là encore, je ne cautionne pas l'emploi du press-papier ... imagine que le gadget palette soit employé pour un traitement de textJ'ai aussi ajouté l'export de la couleur en Hex dans le presse papier et elle s'affiche en info bulle au clique gauche (export plus pratique pour feuille de style css par ex).
Ar-S a écrit : J'ai aussi mis cadre = 0 par defaut.