ColorButton
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
ColorButton
Voilà, je suis à la recherche d'un bouton style imagegadget avec un rectangle de couleur à l'intérieur, où il serait possible de définir et de récupérer la couleur !
Si vous avez cela sous la main !
Merci...
Si vous avez cela sous la main !
Merci...
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Je me suis si mal exprimé 
Bon, je recherche un bouton coloré où on pourrait avoir et définir la couleur !

Bon, je recherche un bouton coloré où on pourrait avoir et définir la couleur !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 264
- Inscription : ven. 28/oct./2005 8:20
- Localisation : Mayotte ( 976 ), Océan Indien, France
Voilà, si j'ai bien compris, c'est ça que tu cherches.
J'ai essayé de le faire de la façon la plus propre possible, et en essayant de commenter le plus clairement possible aussi.
J'ai essayé de le faire de la façon la plus propre possible, et en essayant de commenter le plus clairement possible aussi.
Code : Tout sélectionner
Interface ColorButton
GetId.l() ; récupère l'id du gadget
GetColor.l() ; récupère sa couleur
SetColor(val) ; change sa couleur
EndInterface
Structure Fonction
GetId.l ; adresse de getid()
GetColor.l ; adresse de getcolor()
SetColor.l ; adresse de setcolor()
EndStructure
Structure _ColorButton ; structure du gadget
*buffer.Fonction ; avec les fonctions
color.l ; sa couleur
Id.l ; son Id
EndStructure
Procedure GetId(*buffer._ColorButton)
ProcedureReturn *buffer\Id ; retourne son Id
EndProcedure
Procedure GetColor(*buffer._ColorButton)
ProcedureReturn *buffer\color ; retourne sa couleur
EndProcedure
Procedure SetColor(*buffer._ColorButton, val)
width = GadgetWidth(*buffer\Id)
height = GadgetHeight(*buffer\Id)
image = CreateImage(#PB_Any, width, height) ; cré une image de la bonne taille
StartDrawing(ImageOutput())
Box(0, 0, width, height, val) ; y dessine la couleur
StopDrawing()
SetGadgetState(*buffer\Id, ImageID()) ; change la couleur du gadget
*buffer\color = val ; la modifie dans la structure du gadget
FreeImage(image) ; libère l'image
EndProcedure
Procedure ColorButton(Id, x, y, width, height, color)
image = CreateImage(#PB_Any, width, height) ; crée l'image
StartDrawing(ImageOutput())
Box(0, 0, width, height, color) ; avec la bonne couleur
StopDrawing()
ImageGadget(Id, x, y, width, height, ImageID()) ; crée le gadget
*fonction.Fonction = AllocateMemory(SizeOf(Fonction)) ; alloue de la memoire pour y stocker les adresses des fonctions
*fonction\GetColor = @GetColor() ; on y mets les adresses
*fonction\SetColor = @SetColor()
*fonction\GetId = @GetId()
*Gadget._ColorButton = AllocateMemory(SizeOf(_colorbutton)) ; on alloue de la memoire pour y stocker les info internes du gadget
*Gadget\color = color ; on y met la couleur qu'il faut
*Gadget\Id = Id ; le bon id
*Gadget\buffer = *fonction ; et les adresses de fonctions
FreeImage(image) ; on libère l'image
ProcedureReturn *Gadget ; on retourne l'adresse de la strcutre interne du gadget
EndProcedure
Dim Gadget.ColorButton(5)
OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "fenetre")
CreateGadgetList(WindowID())
For x = 0 To 5
Gadget(x) = ColorButton(x, 0, 50 * x, 50, 20, RGB(255, 0, 0)) ; crée le bouton
Next
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Gadget.ColorButton = Gadget(EventGadgetID())
Gadget\SetColor(RGB(Random(255), Random(255), Random(255))) ; on y met une couleur aléatoire
Debug Gadget\GetColor() ; on affiche la valeur de cette couleur
Debug Gadget\GetId() ; et son id
EndIf
Until event = #PB_Event_CloseWindow
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Merci, mais j'ai réalisé ce que j'ai souhaité faire :
Code : Tout sélectionner
Structure TButtonColor
id_button.l
id_image.l
color.l
EndStructure
Global NewList BC.TButtonColor()
Declare BC_ButtonColor(Gadget,x,y, Width,height,color)
Declare BC_GetColor(gadget)
Declare BC_SetColor(gadget,color)
OpenWindow(0, 20, 20, 500, 500, "fenetre", #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
BC_ButtonColor(2,10,10,30,50,RGB(25,50,75))
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget()=2
Debug "----"
Debug Red(BC_GetColor(2))
Debug Green(BC_GetColor(2))
Debug Blue(BC_GetColor(2))
BC_SetColor(2,RGB(Random(255),Random(255),Random(255)))
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
Procedure BC_ButtonColor(Gadget,x,y, Width,height,color)
image=CreateImage(#PB_Any,Width,height)
StartDrawing(ImageOutput(image))
Box(0,0,Width,Height,color)
StopDrawing()
AddElement(BC())
BC()\id_button=gadget
BC()\id_image=image
BC()\color=color
ButtonImageGadget(gadget,x,y,width,height,ImageID(image))
ProcedureReturn
EndProcedure
Procedure BC_GetColor(gadget)
For i=0 To CountList(BC())-1
SelectElement(BC(),i)
If BC()\id_button=gadget
result=BC()\color
Break
Else
result=-1
EndIf
Next
ProcedureReturn result
EndProcedure
Procedure BC_SetColor(gadget,color)
For i=0 To CountList(BC())-1
SelectElement(BC(),i)
If BC()\id_button=gadget
StartDrawing(ImageOutput(BC()\id_image))
Box(0,0,GadgetWidth(gadget),GadgetHeight(gadget),color)
StopDrawing()
SetGadgetState(gadget,ImageID(BC()\id_image))
BC()\color=color
result=0
Break
Else
result=-1
EndIf
Next
ProcedureReturn result
EndProcedure
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Bien compliqué tout cela !
J'ai plus simple je pense, et peut être plus proche de ce que voulais Progi1984
Ceci est en version 4 !
ceci en version 3.94
J'ai plus simple je pense, et peut être plus proche de ce que voulais Progi1984
Ceci est en version 4 !
Code : Tout sélectionner
Enumeration
#Win0
#BP0
#Im0
EndEnumeration
res = CreateImage(#Im0,60,40)
Procedure Open_Win0()
If OpenWindow(#Win0, 292, 141, 600, 300, "New window ( 0 )")
If CreateGadgetList(WindowID(#Win0))
ButtonImageGadget(#BP0, 30, 240, 60, 30,ImageID(2))
EndIf
EndIf
EndProcedure
Open_Win0()
Repeat
Event = WaitWindowEvent()
GadgetID = EventGadget()
If Event = #PB_Event_Gadget
If GadgetID = #BP0
Color.l = ColorRequester()
StartDrawing(ImageOutput(#Im0))
Box(0,0,60,40,Color)
StopDrawing()
SetGadgetState(#BP0,ImageID(#Im0))
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
ceci en version 3.94
Code : Tout sélectionner
Enumeration
#Win0
#BP0
#Im0
EndEnumeration
res = CreateImage(#Im0,60,40)
Procedure Open_Window_0()
If OpenWindow(#Win0, 292, 141, 600, 300, #PB_Window_SystemMenu| #PB_Window_TitleBar , "Couleur")
If CreateGadgetList(WindowID())
ButtonImageGadget(#BP0, 30, 240, 60, 30, ImageID())
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat
Event = WaitWindowEvent()
WindowID = EventWindowID()
GadgetID = EventGadgetID()
EventType = EventType()
If Event = #PB_EventGadget
If GadgetID = #BP0
Color.l = ColorRequester()
UseImage(#im0)
StartDrawing(ImageOutput())
Box(0,0,60,40,Color)
StopDrawing()
SetGadgetState(#BP0,ImageID())
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
Denis
Bonne Jounée à tous
Bonne Jounée à tous
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Merci BrossDen, mais le désavantage de ton code est que l'on ne peut récupérer la couleur ni assigner de nouvelles couleurs. Regarde mon code, juste au dessus du tien 

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Sincèrement je ne vois pas ce que ton programme fait de plus en dehors que pour passer du vert au rouge il te faut cliquer x fois sur le bouton pour peut être arriver un jour à la couleur escompter.
La couleur c'est la variable Color qui te la donne !! (dans mon code !)
Modif pour démo :
La couleur c'est la variable Color qui te la donne !! (dans mon code !)
Modif pour démo :
Code : Tout sélectionner
Enumeration
#Win0 : #BP0 : #Im0 : #Str0
EndEnumeration
res = CreateImage(#Im0,60,40)
Procedure Open_Win0()
If OpenWindow(#Win0, 292, 141, 600, 300, "Couleur")
If CreateGadgetList(WindowID(#Win0))
ButtonImageGadget(#BP0, 30, 240, 60, 30,ImageID(#Im0))
StringGadget(#Str0,20,20,80,20,"0")
EndIf
EndIf
EndProcedure
Procedure ChangeCouleur(Color)
StartDrawing(ImageOutput(#Im0)) : Box(0,0,60,40,Color) : StopDrawing()
SetGadgetState(#BP0,ImageID(#Im0))
EndProcedure
Open_Win0()
Repeat
Event = WaitWindowEvent()
GadgetID = EventGadget()
If Event = #PB_Event_Gadget
If GadgetID = #BP0
ChangeCouleur(ColorRequester())
SetGadgetText(#Str0,Str(Color))
ElseIf GadgetID = #Str0
If Color.l <> Val(GetGadgetText(#Str0))
ChangeCouleur(Val(GetGadgetText(#Str0)))
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
Denis
Bonne Jounée à tous
Bonne Jounée à tous
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
C'est vrai, dsl, j'avais pas vu 

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net