Etat des cases à cocher dans les ListIconGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Etat des cases à cocher dans les ListIconGadget

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

et en utilisant un ContainerGadget par boite a cocher
tu peut pas de debrouiller avec ça ??

j'ai jamais essayé ! :?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Mais non!

Il s'agit des ListIconGadget avec l'option #PB_ListIcon_CheckBoxes qui affiche une case à cocher dans chaque ligne. ;)

Chris :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
;
:)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

tu sait moi les truc nouveau !!
Essaie une fois, tu ne pourras plus t'en passer!

Chris :)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Regarde du coté du message LVM_GETITEMSTATE
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ca à l'air d'être ça. Merci Denis :wink:

Chris :)
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message 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
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

:lol: tout simplement... (le code)
Répondre