Page 1 sur 1

Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:31
par Le Soldat Inconnu
Salut,

Vu qu'on est en plein dans les sélecteurs de couleur
http://www.purebasic.fr/french/viewtopi ... =6&t=12596

Voici une petite idée. Qu'en pensez-vous ?

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.60

; Explication du programme :
; Sélection de couleur

; Création de la fenêtre
If OpenWindow(0, 0, 0, 500, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
	End
EndIf

Gadget_ListeCouleur = ComboBoxGadget(#PB_Any, 10, 10, 48, 24, #PB_ComboBox_Image)

#CouleurStandard_Pas_NoirBlanc = 32
#CouleurStandard_Pas_Couleur = 64
#CouleurStandard_Marqueur = "-"
Structure CouleurStandardInfo
	Couleur.l
	Image.l
	Marque.b
EndStructure
NewList CouleurStandard.CouleurStandardInfo()

; Création de la liste des couleurs
; Nuance de gris
For i = 0 To 255 Step #CouleurStandard_Pas_NoirBlanc
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i, i)
	If i = 128
		CouleurStandard()\Marque = 1
	EndIf
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = $FFFFFF
; Rouge
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 0, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, i, i)
Next
; Rose
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 0, i / 2)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 128) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, i, 128 + i / 2)
Next
; Mauve
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 0, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, i, 255)
Next
; Violet
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i / 2, 0, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128, 0, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128 + i / 2, i, 255)
Next
; Bleu
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 0, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 0, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i, 255)
Next
; Bleu ciel
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i / 2, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 128, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 128 + i / 2, 255)
Next
; Cyan
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 255, 255)
Next
; Vert d'eau
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i, i / 2)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 128) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 255, 128 + i / 2)
Next
; Vert
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 255, i)
Next
; Vert clair
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i / 2, i, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128, 255, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128 + i / 2, 255, i)
Next
; Jaune
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 255, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 255, i)
Next
; Orange
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i / 2, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 128, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 128 + i / 2, i)
Next


; Remplissage de la liste des couleur
ForEach CouleurStandard()
	CouleurStandard()\Image = CreateImage(#PB_Any, 16, 16, 24)
	StartDrawing(ImageOutput(CouleurStandard()\Image))
		Box(0, 0, 16, 16, CouleurStandard()\Couleur)
	StopDrawing()
	If CouleurStandard()\Marque
		AddGadgetItem(Gadget_ListeCouleur, -1, #CouleurStandard_Marqueur, ImageID(CouleurStandard()\Image))
	Else
		AddGadgetItem(Gadget_ListeCouleur, -1, " ", ImageID(CouleurStandard()\Image))
	EndIf
Next


Gadget_AffichageSelection = TextGadget(#PB_Any, 10, 40, 200, 16, "")


Repeat
	Event = WaitWindowEvent()
	
	Select Event
		Case #PB_Event_Gadget
			Select EventGadget() ; Gadgets
				Case Gadget_ListeCouleur
					Selection = GetGadgetState(Gadget_ListeCouleur)
					If Selection >= 0
						SelectElement(CouleurStandard(), Selection)
						SetGadgetText(Gadget_AffichageSelection, "RGB(" + Str(Red(CouleurStandard()\Couleur)) + ", " + Str(Green(CouleurStandard()\Couleur)) + ", " + Str(Blue(CouleurStandard()\Couleur)) + ")" + " ; " + "$" + RSet(Hex(CouleurStandard()\Couleur), 6, "0"))
					Else
						SetGadgetText(Gadget_AffichageSelection, "")
					EndIf
			EndSelect
	EndSelect
	
Until Event = #PB_Event_CloseWindow

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:39
par Ar-S
Excellent !
ça peut permettre à l'utilisateur de modifier les couleurs de son interface facilement.
j'adopte

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:40
par Guimauve
Ici sous LinuxMint + Gnome-Shell

le ComboBoxGadget fait tout l'écran et j'ai même des flèche dans le haut et le bas pour faire défiler.

À mon humble avis, il serait préférable d'utiliser un ListViewGadget() un peu dans le même style que le sélecteur de couleur présent dans Rhinoceros 3D (À gauche avec les noms quand cela est possible)

Image

Si non ça peut-être intéressant quand même.

A+
Guimauve

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:47
par Le Soldat Inconnu
J'ai mis à jour le code du premier poste.

J'ai ajouté un petit marqueur sur les couleurs centrale de chaque nuance.

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:48
par Backup
@le soldat
probleme , chez moi je n'ai qu'une fenetre grise rien dedans !!
sauf un ComboBoxGadget() normal ???

j'ai pas de cercle de couleurs

... a moins que Guimauve parle d'un autre selecteur ..

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:56
par Le Soldat Inconnu
@Dobro : Clic sur le combobox :mrgreen: Guimauve montre un autre sélecteur

Comme ça Guimauve ?

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.60

; Explication du programme :
; Sélection de couleur

#ComboBox = 0 ; Si 0, le code utilise un TreeGadget

; Création de la fenêtre
If OpenWindow(0, 0, 0, 500, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
	End
EndIf

CompilerIf #ComboBox
	Gadget_ListeCouleur = ComboBoxGadget(#PB_Any, 10, 10, 48, 24, #PB_ComboBox_Image)
CompilerElse
	Gadget_ListeCouleur = TreeGadget(#PB_Any, 10, 10, 80, 128, #PB_Tree_NoLines)
CompilerEndIf

#CouleurStandard_Pas_NoirBlanc = 32
#CouleurStandard_Pas_Couleur = 64
#CouleurStandard_Marqueur = "-"
Structure CouleurStandardInfo
	Couleur.l
	Image.l
	Marque.b
EndStructure
NewList CouleurStandard.CouleurStandardInfo()

; Création de la liste des couleurs
; Nuance de gris
For i = 0 To 255 Step #CouleurStandard_Pas_NoirBlanc
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i, i)
	If i = 128
		CouleurStandard()\Marque = 1
	EndIf
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = $FFFFFF
; Rouge
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 0, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, i, i)
Next
; Rose
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 0, i / 2)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 128) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, i, 128 + i / 2)
Next
; Mauve
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 0, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, i, 255)
Next
; Violet
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i / 2, 0, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128, 0, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128 + i / 2, i, 255)
Next
; Bleu
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 0, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 0, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i, 255)
Next
; Bleu ciel
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i / 2, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 128, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 128 + i / 2, 255)
Next
; Cyan
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i, i)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 255) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 255, 255)
Next
; Vert d'eau
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i, i / 2)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 128) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 255, 128 + i / 2)
Next
; Vert
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, i, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, 255, i)
Next
; Vert clair
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i / 2, i, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128, 255, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128 + i / 2, 255, i)
Next
; Jaune
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 255, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 255, i)
Next
; Orange
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(i, i / 2, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 128, 0) : CouleurStandard()\Marque = 1
For i = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
	AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 128 + i / 2, i)
Next


; Remplissage de la liste des couleur
ForEach CouleurStandard()
	CouleurStandard()\Image = CreateImage(#PB_Any, 16, 16, 24)
	StartDrawing(ImageOutput(CouleurStandard()\Image))
		Box(0, 0, 16, 16, CouleurStandard()\Couleur)
	StopDrawing()
	If CouleurStandard()\Marque
		AddGadgetItem(Gadget_ListeCouleur, -1, #CouleurStandard_Marqueur, ImageID(CouleurStandard()\Image))
	Else
		AddGadgetItem(Gadget_ListeCouleur, -1, " ", ImageID(CouleurStandard()\Image))
	EndIf
Next

Gadget_AffichageSelection = TextGadget(#PB_Any, 10, GadgetY(Gadget_ListeCouleur) + GadgetHeight(Gadget_ListeCouleur) + 8, 200, 16, "")


Repeat
	Event = WaitWindowEvent()
	
	Select Event
		Case #PB_Event_Gadget
			Select EventGadget() ; Gadgets
				Case Gadget_ListeCouleur
					Selection = GetGadgetState(Gadget_ListeCouleur)
					If Selection >= 0
						SelectElement(CouleurStandard(), Selection)
						SetGadgetText(Gadget_AffichageSelection, "RGB(" + Str(Red(CouleurStandard()\Couleur)) + ", " + Str(Green(CouleurStandard()\Couleur)) + ", " + Str(Blue(CouleurStandard()\Couleur)) + ")" + " ; " + "$" + RSet(Hex(CouleurStandard()\Couleur), 6, "0"))
					Else
						SetGadgetText(Gadget_AffichageSelection, "")
					EndIf
			EndSelect
	EndSelect
	
Until Event = #PB_Event_CloseWindow


Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 21:59
par Backup
arf ! la fausse joie , je pensai que ton code c'etait la photo de Guimauve .... j'me disai aussi en si peu de lignes ... :roll: :lol:

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 22:02
par Le Soldat Inconnu
fausse joie ??? tu n'as qu'a dire que mon code est nul tant que tu y es :mrgreen:

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : dim. 19/févr./2012 22:15
par Backup
:)

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : lun. 20/févr./2012 1:13
par Le Soldat Inconnu
J'ai ajouté la liste dans mon sélecteur de couleur :) Et en passant, j'ai ajouté le support de l'alpha. je posterais tout cela demain.

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : lun. 20/févr./2012 1:34
par Guimauve
Le Soldat Inconnu a écrit :Comme ça Guimauve ?
C'est dans ce style effectivement !

Mais faudrait ajouter les noms et pour ce faire je pense à l'utilisation d'un ScrollAreaGadget() pour et utiliser un CanvasGadget() par couleur afin de récupérer la couleur sélectionné lorsque l'on clique dessus.

C'est à étudier éventuellement.

A+
Guimauve

Re: Sélecteur de couleur dans un ComboBoxGadget

Publié : mar. 21/févr./2012 11:22
par Kwai chang caine
Voici une petite idée. Qu'en pensez-vous ?
Moi ça me plait, c'est du pas vu et ça marche :D
Je préfère même le premier :roll:
Merci Soldat 8)