Page 1 sur 2
Etat des cases à cocher dans les ListIconGadget
Publié : mar. 01/juin/2004 23:26
par Chris
Allez, je continue avec mes questions.
Est-ce que quelqu'un sait comment récupérer l'état sélectionné ou non d'une case à cocher située dans un ListIconGadget(),
sans sélectionner la ligne ou se trouve la case, et j'insiste sur ce point.
Il me semble que j'avais déjà eu ce problème avec le TreeViewGadget quand j'ai commencé ma lib. (Que j'ai jamais fini, d'ailleurs

).
Problème :
GetGadgetState() retourne le n° de la ligne selectionnée, ou -1 si aucune ligne n'est selectionnée. Si on clique sur la case à cocher sans que la ligne soit sélectionnée, la fonction retourne donc -1, et comme il faut le n° de la ligne ou se trouve la case...!
Chris

Publié : mar. 01/juin/2004 23:46
par Backup
et en utilisant un ContainerGadget par boite a cocher
tu peut pas de debrouiller avec ça ??
j'ai jamais essayé !

Publié : mar. 01/juin/2004 23:59
par Chris
Mais non!
Il s'agit des ListIconGadget avec l'option #PB_ListIcon_CheckBoxes qui affiche une case à cocher dans chaque ligne.
Chris

Publié : mer. 02/juin/2004 0:06
par Backup
tien j'ai fait 3 case a coche en activant une case sur les trois
ensuite je test AVANT la verif de l'event
et ça me sort l'etat des case a coche alors qu'on touche a rian !!
c'est ça que tu veux ??
Code : Tout sélectionner
; PureBasic Visual Designer v3.90 build 1360
; PureBasic Visual Designer v3.90 build 1360
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#CheckBox_0
#CheckBox_1
#CheckBox_2
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 30, 600, 300, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
If CreateGadgetList(WindowID())
CheckBoxGadget(#CheckBox_0, 60, 30, 30, 30, "CheckBox checked"): SetGadgetState(#CheckBox_0,1)
CheckBoxGadget(#CheckBox_1, 30, 30, 30, 30, "")
CheckBoxGadget(#CheckBox_2, 120, 30, 30, 30, "")
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat
;************* ici ***********
Event = WaitWindowEvent()
Resultat1 = GetGadgetState(#CheckBox_0)
Resultat2 = GetGadgetState(#CheckBox_1)
Resultat3 = GetGadgetState(#CheckBox_2)
Debug Resultat1
Debug Resultat2
Debug Resultat3
;************************************
If Event = #PB_EventGadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadgetID()
If GadgetID = #CheckBox_0
Debug "GadgetID: #CheckBox_0"
ElseIf GadgetID = #CheckBox_1
Debug "GadgetID: #CheckBox_1"
ElseIf GadgetID = #CheckBox_2
Debug "GadgetID: #CheckBox_2"
EndIf
EndIf
Until Event = #PB_EventCloseWindow
End
;

Publié : mer. 02/juin/2004 0:12
par Chris
Naaaaan!!!
Tiens, voilà un bout de code:
Code : Tout sélectionner
;/Constantes Window
Enumeration
#Window_0
EndEnumeration
;/Constantes Gadget
Enumeration
#List
#Btn_Quit
EndEnumeration
If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
If CreateGadgetList(WindowID(#Window_0))
ListIconGadget(#List,0,0,300,170,"Test",300,#PB_ListIcon_CheckBoxes)
ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
EndIf
For i = 0 To 5
AddGadgetItem(#List,-1,"Ligne "+Str(i))
Next
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #List
If EventType() = #PB_EventType_LeftClick
result = GetGadgetItemState(#List,GetGadgetState(#List))
If result &#PB_ListIcon_Checked
Debug "CheckBox coché"
Else
Debug "CheckBox décoché"
EndIf
EndIf
Case #Btn_Quit : Quit = 1
EndSelect
;Case
;Case
Case #PB_EventCloseWindow : Quit = 1
EndSelect
Until Quit = 1
End
EndIf
Chris

Publié : mer. 02/juin/2004 0:30
par Chris
Dobro a écrit :bon ok et tu veux quoi au juste ??

Je veux récupérer l'état de la case à cocher situé dans une ligne du ListIconGadget(), mais sans sélectionner la ligne, juste en selectionnant la case.
Quand je cliques sur la case, elle devient cochée, et donc, devrait retourner 2 qui est la valeur de la constante #PB_ListIcon_Checked.
Si je recliques dessus, elle devient non cochée, et devrait donc retourner 0.
Regarde mon bout de code au debugger, et tu verras ce que je veux.
****** Ajouté ******
Ben voilà : Pendant que je répond, il enlève son message, et moi, j'ai l'air de quoi, maintenant, avec ma réponse qui s'adresse à personne
Chris

Publié : mer. 02/juin/2004 0:43
par Backup
moi je ferai comme ça
tu cree un tableau a 1 dimention ou chaque element du tableau correspon a
un checkbox
si tu sais comment est l'etat des check au depard du program tu fait correspondre la valeur de ton tableau a la valeur des checkbox
comme ça si le gars il clique sur un checkbox tu active l'element de ton tableau correspondant (en le mettant a 1)
et si le cjexkbox est desactive par le gard tu met l'element de ton tableau
correspondant a ce checkbox a 0
comme ça si tu veux connaitre l'etat de tes check box , tu lit ton tableau
suis-je clair ??

Publié : mer. 02/juin/2004 0:48
par Chris
Très clair, je vais essayer comme ça, mais c'est pas top comme truc
Merci
Chris
PS: Je vais plutot utiliser une LinkedList(), les tableaux ont une dimension finie, et les données sont perdues quand on les redimensionne. (ou alors, il faut les transférer dans un autre tableau avant de redimensionner)
Publié : mer. 02/juin/2004 0:53
par Backup
j'ai regarde dans les api et a priorit il faut qu'il y est un event
pour que les check fonctionnent !!!
il n'y a pas de constante relatif a l'etat !!
d'ailleurs ils precisent que c'est a toi de gerer l'etat qui peut etre different de l'aspect !....
PS: Je vais plutot utiliser une LinkedList(), les tableaux ont une dimension finie, et les données sont perdues quand on les redimensionne. (ou alors, il faut les transférer dans un autre tableau avant de redimensionner)
tu sait moi les truc nouveau !!

Publié : mer. 02/juin/2004 1:01
par Chris
tu sait moi les truc nouveau !!
Essaie une fois, tu ne pourras plus t'en passer!
Chris

Publié : mer. 02/juin/2004 6:34
par Anonyme2
Regarde du coté du message LVM_GETITEMSTATE
Publié : mer. 02/juin/2004 6:50
par Anonyme2
C'est ça que tu veux Chris ?
Code : Tout sélectionner
Enumeration
#MainWindow
#ListIconGadget1
#Font
#FontHeader
#CheckBox
EndEnumeration
#LVIS_CHECKED = $2000
; ;========================================================================================
; ;========================================================================================
If OpenWindow(#MainWindow, 0, 0, 520, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, " SelectListiconCheckBox() - SelectListiconCheckBox()")
If CreateGadgetList(WindowID()) And ListIconGadget(#ListIconGadget1, 1, 50, 320, 235, "Colonne 1", 298, #PB_ListIcon_MultiSelect|#PB_ListIcon_CheckBoxes)
ButtonFont.l = LoadFont(#FontHeader, "Arial", 10, #PB_Font_HighQuality)
CheckBoxGadget(#CheckBox, 330, 70, 155, 15, "Clicker pour afficher")
FontID = LoadFont(#Font, "ARIAL", 9)
SetGadgetFont(#ListIconGadget1, FontID)
For i.b = 1 To 12
AddGadgetItem(#ListIconGadget1, -1, Str(i))
Next i
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
event = EventGadgetID()
If event = #CheckBox
For i = 0 To CountGadgetItems(#ListIconGadget1)-1
If (SendMessage_(GadgetID(#ListIconGadget1),#LVM_GETITEMSTATE,i ,#LVIS_CHECKED))& #LVIS_CHECKED = #LVIS_CHECKED
Debug "Element "+Str(i +1) + " sélectionné"
EndIf
Next
EndIf
Case #PB_EventCloseWindow
Quit + 1
EndSelect
Until Quit
EndIf
EndIf
End
Publié : mer. 02/juin/2004 8:35
par Chris
Ca à l'air d'être ça. Merci Denis
Chris

Publié : mer. 02/juin/2004 9:16
par Fred
La version PureBasic:
Code : Tout sélectionner
Enumeration
#MainWindow
#ListIconGadget1
#Font
#FontHeader
#CheckBox
EndEnumeration
; ;========================================================================================
; ;========================================================================================
If OpenWindow(#MainWindow, 0, 0, 520, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, " SelectListiconCheckBox() - SelectListiconCheckBox()")
If CreateGadgetList(WindowID()) And ListIconGadget(#ListIconGadget1, 1, 50, 320, 235, "Colonne 1", 298, #PB_ListIcon_MultiSelect|#PB_ListIcon_CheckBoxes)
ButtonFont.l = LoadFont(#FontHeader, "Arial", 10, #PB_Font_HighQuality)
CheckBoxGadget(#CheckBox, 330, 70, 155, 15, "Clicker pour afficher")
FontID = LoadFont(#Font, "ARIAL", 9)
SetGadgetFont(#ListIconGadget1, FontID)
For i.b = 1 To 12
AddGadgetItem(#ListIconGadget1, -1, Str(i))
Next i
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
event = EventGadgetID()
If event = #CheckBox
For i = 0 To CountGadgetItems(#ListIconGadget1)-1
If GetGadgetItemState(#ListIconGadget1, i) & #PB_ListIcon_Checked
Debug "Element "+Str(i +1) + " sélectionné"
EndIf
Next
EndIf
Case #PB_EventCloseWindow
Quit + 1
EndSelect
Until Quit
EndIf
EndIf
End
Publié : mer. 02/juin/2004 9:40
par cederavic

tout simplement... (le code)