ListIcongadget - griser le case à cocher

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

ListIcongadget - griser le case à cocher

Message par Bmld76 »

Bonjour,

Je programme avec Purebasic sous MacOs depuis quelques mois et j'arrive à trouver les réponses à mes problèmes, mais la je cale. Je voudrais griser les cases à cocher d'une ListIcingadget pour les désactiver. J'ai utiliser DisableGadget (#ListIcongadget), mais toutes la liste devient inactive et pas très pratique à utiliser.

Autre problème, est-il possible d'avoir un event lorsque l'on clique sur un titre d'une ListIcongadget pour déclencher un trie par exemple.

Merci d'avance si vous avez une solution ou une piste.

Bien Cordialement
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: ListIcongadget - griser le case à cocher

Message par Ar-S »

Bonjour,
Pourrais tu poster un bout de code stp ?.
~~~~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
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: ListIcongadget - griser le case à cocher

Message par Bmld76 »

Bonsoir,
Merci pour ta réponse.
Voici un code, donc quand on valide le bouton verrouille 1, j'aimerais simplement griser les checkbox , et non tout le texte, ou invalider le changement d'état des checkbox, même si celui-ci n'est pas traité en EventGadget;

Code : Tout sélectionner

If OpenWindow(1, 100, 100, 600, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 5, 5, 590, 140, "Name", 100,#PB_ListIcon_CheckBoxes)
  AddGadgetColumn(0, 1, "Address", 250)
  AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
  AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
  ButtonGadget(10, 20 , 160  , 100, 30, "verrouille 1",#PB_Button_Toggle  ) 
  Repeat
    Event = WaitWindowEvent()
    Gadget = EventGadget()
    
    Select Gadget
      Case  10
        If  GetGadgetState(Gadget) = 1
          DisableGadget(0,#True) 			; de préférence  invalider uniquement le changement d'état des checkbox
        Else
          DisableGadget(0,#False)
        EndIf
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
EndIf
Bien cordialement
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: ListIcongadget - griser le case à cocher

Message par Ar-S »

Je ne suis pas sur que tu y arrives nativement.
Par contre tu peux gruger avec des checkboxgadget. C'est pas ultra propre mais c'est une solution possible si tu n'en trouves pas d'autres.

Code : Tout sélectionner

If OpenWindow(1, 100, 100, 600, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 15, 5, 570, 140, "Name", 100)
  AddGadgetColumn(0, 1, "Address", 250)
  AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
  AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
  ButtonGadget(10, 20 , 160  , 100, 30, "verrouille 1",#PB_Button_Toggle  ) 
  CheckBoxGadget(1, 1,  30,10, 20, "")
  CheckBoxGadget(2, 1,  50,10, 20, "")
  
  Repeat
    Event = WaitWindowEvent()
    Gadget = EventGadget()
    
    Select Gadget
      Case  10
        If  GetGadgetState(Gadget) = 1
            DisableGadget(1,#True) 			
            DisableGadget(2,#True)
        Else
            DisableGadget(1,#False)
            DisableGadget(2,#False)
        EndIf
    EndSelect

  Until Event = #PB_Event_CloseWindow
EndIf
Une autre solution plus graphique serait d'utiliser un canvas pour te créer une liste gadget personnalisable.
~~~~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
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: ListIcongadget - griser le case à cocher

Message par Bmld76 »

Bonjour,

Merci pour ces pistes, je me doutais que si je ne trouve pas sur les forums, ce n'est certainement pas possible.

En solution , pour verrouiller mais laisser l'affichage tel quel , lors un changement d'état de la checkbox, je raffarichie la liste tel quel donc la checkbox ne change pas en apparence. L'effet est correct.

Bien cordialement
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: ListIcongadget - griser le case à cocher

Message par Bmld76 »

Je viens de tester ton code, et ta solution me plait bien également.

cordialement
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: ListIcongadget - griser le case à cocher

Message par Bmld76 »

Suite si cela intéresse quelqu'un ...

J'ai adapté la solution de Ar-S avec une 2eme ListeIconGadget ne contenant que des checkbox , plus facile pour aligner et certainement plus facile pour la gestion des événements.

Code : Tout sélectionner

If OpenWindow(1, 100, 100, 600, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 40, 5, 570, 140, "Name", 100)
  ListIconGadget(11, 6, 5, 35, 140, "P", 20,#PB_ListIcon_CheckBoxes)
  AddGadgetColumn(0, 1, "Address", 250)
  AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
  AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
  ButtonGadget(10, 20 , 160  , 100, 30, "verrouille 1",#PB_Button_Toggle  ) 
  AddGadgetItem(11, -1, "")
  AddGadgetItem(11, -1, "")
  TextGadget(#PB_Any,15,12,20, 20,"P")  

  
  Repeat
    Event = WaitWindowEvent()
    Gadget = EventGadget()
    
    Select Gadget
      Case  10
        If  GetGadgetState(Gadget) = 1
            DisableGadget(11,#True) 			
        Else
            DisableGadget(11,#False)
        EndIf
    EndSelect

  Until Event = #PB_Event_CloseWindow
EndIf
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: ListIcongadget - griser le case à cocher

Message par Ar-S »

Effectivement c'est plus simple pour aligner. L'intérêt des checkbox c'est dans le cas ou tu ne souhaite disable que certaines d'entre elles.
~~~~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
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: ListIcongadget - griser le case à cocher

Message par Mesa »

On peut utuiliser l'astuce des images.

Code : Tout sélectionner

;
;Mesa February 2022


Enumeration imagecheckbox
	#imCheckNo
	#imCheckYes
	#imCheckNoGray
	#imCheckYesGray
EndEnumeration

Enumeration gadget
	#listicon
	#btnlock
EndEnumeration

CreateImage(#imCheckNo,16,16,24,#White)
StartDrawing(ImageOutput(#imCheckNo))
DrawingMode(#PB_2DDrawing_Outlined )
Box(1,1,15,15,#Black)
StopDrawing()

CreateImage(#imCheckYes,16,16,24,#White)
StartDrawing(ImageOutput(#imCheckYes))
DrawingMode(#PB_2DDrawing_Outlined )
Box(1,1,15,15,#Black)
LineXY(1,1,15,15,#Black)
LineXY(15,1,1,15,#Black)
StopDrawing()

CreateImage(#imCheckNoGray,16,16,24,#Gray)
StartDrawing(ImageOutput(#imCheckNoGray))
DrawingMode(#PB_2DDrawing_Outlined )
Box(1,1,15,15,#Black)
StopDrawing()

CreateImage(#imCheckYesGray,16,16,24,#Gray)
StartDrawing(ImageOutput(#imCheckYesGray))
DrawingMode(#PB_2DDrawing_Outlined )
Box(1,1,15,15,#Black)
LineXY(1,1,15,15,#Black)
LineXY(15,1,1,15,#Black)
StopDrawing()

Global Dim checkstate(1)
ItemHeight = 18 ; Change this value if you change the fontsize of the listicongadget

If OpenWindow(0, 100, 100, 600, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	ListIconGadget(#listicon, 40, 5, 470, 140, "Name", 100)
	
	AddGadgetColumn(#listicon, 1, "Address", 250)
	
	margin$=" "
	For i=0 To 50
		AddGadgetItem(#listicon, -1, margin$+"Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay",ImageID(#imCheckNo))
		AddGadgetItem(#listicon, -1, margin$+"Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity",ImageID(#imCheckNo))
	Next i
	
	ReDim checkstate(CountGadgetItems(#listicon))
	ButtonGadget(#btnlock, 20 , 160  , 100, 30, "Lock",#PB_Button_Toggle  ) 
	
	gadgetx = GadgetX(#listicon,#PB_Gadget_ScreenCoordinate)
	gadgety = GadgetY(#listicon,#PB_Gadget_ScreenCoordinate) 
	
	AddWindowTimer(0,125,10)
	
	Repeat
		
		Select WaitWindowEvent(1)
				
			Case #PB_Event_CloseWindow
				Quit = 1
				
			Case #PB_Event_Timer 
				If flag = 1
					checkx = DesktopMouseX()
					checky = DesktopMouseY()
					If checkx > gadgetx And checkx < (gadgetx+ItemHeight)
						item = Int((checky - gadgety - ItemHeight)/ItemHeight)
						itemstste = GetGadgetItemState(#listicon,item)      
						checkstate(item) = checkstate(item)!1
						If checkstate(item) = #PB_ListIcon_Selected 
							count + 1
							SetGadgetItemImage(#listicon, item, ImageID(#imCheckYes))
						Else
							count - 1
							SetGadgetItemImage(#listicon, item, ImageID(#imCheckNo))
						EndIf
					EndIf
					If count <> oldcount
						Debug "Item : "+Str(item)+" Checkbox state has changed "
					EndIf        
					oldcount = count
					flag = 0
				EndIf    
				
			Case #PB_Event_Gadget
				
				Select EventGadget()
					Case #listicon				
						Select EventType()                   
							Case #PB_EventType_LeftClick
								If GetGadgetState(#btnlock)=0	
									; if not locked	
									flag = 1
								EndIf
						EndSelect 						
						
					Case  #btnlock
						;If this button is toggled, it's not allowed to check or uncheck anything and checkboxes are grayed
						;else checkboxes are enabled and white
						Select EventType()
							Case #PB_EventType_LeftClick
								
								If GetGadgetState(#btnlock)=1
									im0=#imCheckNoGray
									im1=#imCheckYesGray
								Else
									im0=#imCheckNo
									im1=#imCheckYes
								EndIf
								
								For i=0 To CountGadgetItems(#listicon) -1
									If checkstate(i)=0
										SetGadgetItemImage(#listicon, i, ImageID(im0))
									Else
										SetGadgetItemImage(#listicon, i, ImageID(im1))
									EndIf
								Next i
								
						EndSelect					
						
				EndSelect
				
		EndSelect
		
	Until Quit = 1
EndIf
Pour info, sans timer, ça ne marche pas bien.

M.
Répondre