Page 3 sur 3

Re: un Gadget Palette ....un ...

Publié : ven. 20/juin/2014 8:12
par Micoute
Dobro a écrit :bonne idée , j'adopte :)
Moi aussi, merci Ar-s pour ce partage

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 6:25
par SPH
Cette histoire de noir et blanc pur manquant m'a travaillé. Aussi, j'ai fais des retouches et voila le resultat :

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


Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 8:06
par Micoute
Bonjour à tous,

@SPH, je tiens à te dire que ton travail est fabuleux, donc j'adopte, j'ai juste modifié la ligne 44, ce qui ne change rien du tout au code :

Code : Tout sélectionner

DrawText(15,268,"$"+RSet(Hex(couleur),6,"0"),RGB(0,0,0),RGB(255,255,255))
tu vois que ce que j'ai fait est d'une banalité, mais que veux-tu ? Je suis un perfectionniste pointilleux qui aime les belles choses et quand c'est beau, ça marche forcément mieux !

Merci beaucoup pour ce partage.

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 9:39
par Backup
SPH a écrit :Cette histoire de noir et blanc pur manquant m'a travaillé.

pour info dans la derniere version du code (voir 1er page )
le blanc et le noir s'y trouve deja ;)

et en bas du gadget, un carré noir a coté du blanc a été ajouté , pour un captage rapide :)

d'ailleurs je compte ajouter un carré par couleur primaire et "secondaire"

rouge pur, vert pur, bleu pur ,jaune pure ,violet pur ,cyan pur

bref toutes les couleurs ayant 255 et 0 dans leur composantes ... :)

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 9:49
par Backup
voila , code modifié dans ce sens :)

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 10:35
par Micoute
Eh bien voilà, on y arrive !

Il faut bien admettre qu'on utilise plus souvent les couleurs pures pour les textes et les strings, voire fond de fenêtre et les composantes plutôt pour les graphiques (à mon avis) !

Un grand merci sincère, à toi Dobro

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 10:56
par Backup
arf !!

changement de code, j'ai ajouté les options "Cadre" et titre_de_cadre" en parametres optionnel


Merci :)

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 16:05
par Ar-S
Dobro a écrit :arf !!
changement de code, j'ai ajouté les options "Cadre" et titre_de_cadre" en parametres optionnel
Merci :)
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.
J'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). J'ai aussi mis cadre = 0 par defaut.

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
Voilà le code de dobro complété par ces ajouts.

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

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 18:50
par Backup
Ar-S a écrit : La frame3D et le titre n'ont pas vraiment d’intérêt,
si , car le but finalement n'est pas tant de delimiter la palette que de lui attribuer un titre
ça peut etre utile dans un soft de dessin de savoir a quoi sert la palette "palette couleur dessin" , "palette gomme" , "palette ecriture" , "palette fond" etc ...
ça permet de personnaliser l'emploi voulu de la palette
J'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).
là encore, je ne cautionne pas l'emploi du press-papier ... imagine que le gadget palette soit employé pour un traitement de text
; pour la couleur des fontes ... un traitement de text doit pouvoir utiliser le Press-papier sans parasite ...

en general , j'evite autant que possible l'emploi du press-papier .. (sauf pour une application ou je maitrise l'emploi )
mais un gagdet doit rester le plus discret possible puisque present au sein d'une application dont on ne maitrise pas l'environnement (le GadgetToolTip est par contre une bonne idée ) :)
en tout cas , merci pour ton interet :)

Re: un Gadget Palette ....un ...

Publié : sam. 21/juin/2014 20:24
par Micoute
Ah que c'est bien, la collégialité, où chacun s'approprie un instant, le travail des autres pour l'améliorer, tout simplement pour le plaisir de partager, moi, je suis pour et je dis : continuez ainsi et vous ne rendrez pas heureux que vous !

Alors merci à tous, vous faites partie de l'élite de ce forum et je souhaite vivement qu'il perdure très longtemps !

Re: un Gadget Palette ....un ...

Publié : dim. 22/juin/2014 8:36
par Backup
Ar-S a écrit : J'ai aussi mis cadre = 0 par defaut.

là, je ne compreds pas trop .... 8O
je l'avais deja mis l'option 0 par defaut !

puisque le premier gadget que j'affiche est sans cadre ...

Rappel , Le premier Code du Topic (celui de la page un )
est la reference a prendre avant de coder vos ajout eventuel .. Merci :)


(je vais d'ailleurs de ce pas y ajouter le GadgetToolTip de la couleur pointé ... merci Ar-s)

Re: un Gadget Palette ....un ...

Publié : dim. 22/juin/2014 9:56
par Backup
Bon ... gros changement :)

finalement j'ai viré le Gadget Tooltips, car trop lent a reagir

j'ai instauré une Structure , donc une petite initialisation du gadget est dorénavent nécessaire
(voir exemple Page 1 )

mais cela permet de passer /recuperer plus d'info , sans avoir a utiliser le press-papier :)

du coup maintenant, dans le gadget on aura la couleur Hexa + les composantes qui s'affichent

pour l'utilisation ça ne change rien (a part la petite initialisation du debut (exemple pour 10 gadgets possible (Dim(10) )

Re: un Gadget Palette ....un ...

Publié : dim. 22/juin/2014 19:31
par SPH
Pourquoi mettre 2 palettes ?

Re: un Gadget Palette ....un ...

Publié : dim. 22/juin/2014 19:52
par Backup
parceque l'une est Présenté "normale" (sans cadre )
l'autre avec l'option "Cadre=1" + "titre de palette" :roll: (reveil SPH :lol: )

c'est un exemple qui montre les 2 possibilitées
de plus ça permet de tester qu'on peut utiliser plusieurs fois le Gadgets ...

Re: un Gadget Palette ....un ...

Publié : dim. 22/juin/2014 21:41
par SPH
Des palettes, il y en a des tas : https://www.google.fr/search?q=palette+ ... 66&bih=677

J'aime particulierement celle la : http://www.fangpo1.com/palette_couleurs ... picker.htm
Je vais essayer de la coder en PB... :idea: