un Gadget Palette ....un ...

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

un Gadget Palette ....un ...

Message par Backup »

bon tout a l'heure, j'ai paniqué, car je voulais un gadget palette ,
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 ... 8O 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 :mrgreen: (Merci Fred .. :mrgreen: .... t'a remarqué; c'est ta fete avec moi :mrgreen: )


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 :mrgreen:
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 :)


Image

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

Dernière modification par Backup le dim. 22/juin/2014 10:08, modifié 28 fois.
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message par GallyHC »

Bonjour,

J'avais, il y a pas mal de temps fait cela "http://www.purebasic.fr/french/viewtopi ... =6&t=12596", qui ce trouve aussi sur PBFrance à l'adresse "http://www.pbfrance.com/?url=source&cmd=viewer&val=9".

En image cela donne a peu près le Requester de Windows mais on le met ou l'on veut :

Image

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

j'ai corrigé un petit bug :oops:


@GallyHC , oui mais ça reste un Requester !
je voulais un Gadget ! un truc que tu peut integrer dans une application , et qui soit apparent comme pour

un TextGadget()
un StringGadget()
un ButtonGadget()

:)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message par GallyHC »

non ce n'est pas un requesteur vu que sa ce met dans toute les fenêtres que tu veux. Je n'ai pas vraiment fait un gadget non plus. je voulais en faire un gadget mais pour le moment mon projet "PureLight" est en StandBy ;).

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

ha bah , j'avais pas compris ça comme ça :)



ps : j'ai changé le code de mon Gadget et le code exemple.... la fonction d'event est simplifié :)
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

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

Message par SPH »

La palette de GallyHC est plus complete :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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

mais beaucoup plus complexe a mettre en oeuvre ;)

la mienne 2 fonctions ! et tu as une palette de couleur ... et toc ! :mrgreen:
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

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

Message par SPH »

Va falloir que je me mette serieusement aux openwindows moi...
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
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

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

Message par venom »

ça peut servir merci Dobro





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

Merci Dobro, ça peut servir un gadgetcolorpicker :mrgreen:
SPH a écrit :Va falloir que je me mette serieusement aux openwindows moi...
Image
~~~~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 »

mise a jour du gadget avec le code de coloration de Graph100 (sans sa permission , je pirate ! :mrgreen: )
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message par GallyHC »

Bonjour,

Il faudrait penser aux tests de quand la souris passe du "CanvasGadget", a l'extérieur de celui-ci, car plantage ;).

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

le probleme c'est que je n'ai pas de plantage chez moi !

le gadget prends la souris lorsque je suis dessus (en fait c'est le Canvas qui gere )

et lorsqu'on quitte pareil .... pas de raison que ça plante 8O

[REEDIT]

ok je vais corrigé :oops:
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,

j'ai testé le gadget de Dobro, le seul défaut, c'est qu'il ne faut pas s’amuser à déplacer sa souris pendant que le bouton est pressé, sinon on reçoit des tonnes de données, franchement je le trouve très sympathique ce gadget très réactif, comme son créateur !
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 »

bon en principe j'ai resouds le probleme

il faut cliquer lorsqu'on veux une couleur ... (plus de renvoie permanent si click maintenu ) :)

ps: Ajout parametre Cadre pour "cadrer"

@GallyHC Merci ;)
Répondre