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 :lol: ).

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...! :wink:

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!!! :cry:

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 :lol:

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 ?? :lol: :lol: :lol:

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 !! :D

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 :wink:

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
:lol: tout simplement... (le code)