un Gadget Palette ....un ...

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Dobro a écrit :bonne idée , j'adopte :)
Moi aussi, merci Ar-s pour ce partage
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
SPH
Messages : 4721
Inscription : mer. 09/nov./2005 9:53

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

Message 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

http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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 ... :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

voila , code modifié dans ce sens :)
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

arf !!

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


Merci :)
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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 :)
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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) )
Avatar de l’utilisateur
SPH
Messages : 4721
Inscription : mer. 09/nov./2005 9:53

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

Message par SPH »

Pourquoi mettre 2 palettes ?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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 ...
Avatar de l’utilisateur
SPH
Messages : 4721
Inscription : mer. 09/nov./2005 9:53

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

Message 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:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Répondre