Detection selection listview multiselection [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Detection selection listview multiselection [Résolu]

Message par Kwai chang caine »

Bonjour à tous.

Je viens de m'appercevoir d'un truc horrible :lol:
Et seulement au bout d'un an et demi :oops:

Sur un listview quand on fait GetGadgetState on obtiens la ligne qui est selectionnée ou -1 si rien ne l'a été.....bien.

Maintenant si on met la listview multiselect, rien selectionné ça fait 0 et si on selectionne la premiere ligne ça fait 0 aussi.8O

Mes questions c'est:

1/ Pourquoi l'etat de départ change avec le multiselect ? 8O

Code : Tout sélectionner

If OpenWindow(1,216,150,178,208,"",#PB_Window_SystemMenu)

 If CreateGadgetList(WindowID(1))

  ListViewGadget(0,10,10,160,160,#PB_ListView_Multiselect)
  
  AddGadgetItem(0,-1,"Hello")
  Debug GetGadgetState(0)
    
  Repeat
   
   event = WaitWindowEvent()

   If event = #PB_Event_Gadget
    Debug GetGadgetState(0)
   EndIf
     
  Until event=#PB_Event_CloseWindow
 EndIf
EndIf
Bonne journée
Dernière modification par Kwai chang caine le sam. 09/déc./2006 0:49, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ben oui c'est pas tres logique,
il te suffis de considerer l'element 0 comme element par defaut :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

y'a pas de "il suffit"
c'est un bug voila tout (j'ai pas vérifié mais bon...)

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

Message par Backup »

non seulement mais a priori aucune commande n'existe pour recuperer les multiples sélections !! 8O
ni même pour preselectionner !! :?

Code : Tout sélectionner

#gadget=0
#windows=1

If OpenWindow(#windows,216,150,178,208,"",#PB_Window_SystemMenu)
    
    If CreateGadgetList(WindowID(#windows)) 
        ListViewGadget(#gadget,10,10,160,160,#PB_ListView_Multiselect)
        
        AddGadgetItem(#gadget,-1,"Hello")
        AddGadgetItem(#gadget,-1,"bonjour")
        AddGadgetItem(#gadget,-1,"comment va")
         SetGadgetState(#gadget,2) 
        SetGadgetState(#gadget,1) 
        Repeat 
            
            event = WaitWindowEvent() 
            
            Select event 
                Case  #PB_Event_Gadget   
                
                        resultat$=""
                        selection=GetGadgetState(#gadget)
                        resultat$=resultat$+Str(selection)
                        Debug "les choix selectionnés sont:"+resultat$
                  
                  
                    
            EndSelect
        Until event=#PB_Event_CloseWindow
    EndIf
EndIf
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

il faut boucler pour les multisélections, le gadgetstate indique la 1ere ligne sélectionnée

Dri
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je ne comprend pas comment tu fais dans ton code DOBRO pour savoir si quelque chose a été sélectionné dans le listview.
C'est un peu la le but que je recherchais.
Puisqu'en multiselection le pas sélectionné est egal au sélectionné premiere ligne comment faire la difference ????

En plus y'a un truc que je viens aussi de m'appercevoir, et qui m'a fait galerer dans ma fameuse comprehension des evenements.

Quand on clic sur une LISTVIEW mais en dehors des elements ecrits ou selectionnable, c'est a dire en dessous de la derniere ligne dans l'espace blanc, bah l'evenement gadget n'est pas récupéré 8O

On peut cliquer comme un malade partout et que dal 8O

Alors, ça m'a obligé à utiliser un code de FLYPE (je crois de mémoire) qui me permet de récuperer l'ID du gadget qui est survolé par la souris, enfin une galere quoi.... :?

Normalement quand on clic sur un gadget, on clic, que ce soit sur une ligne deja ecrite ou si il est vide.
Ne devrait on pas récuperer l'evenement quoi qu'il arrive ????

Je crois que Dr DRI a un peu raison sur ce coup la :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 270, 170, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ListViewGadget(0, 10, 10, 250, 120, #PB_ListView_Multiselect)
  For a = 1 To 12
    AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview") ; define listview content
  Next
  
  TextGadget(1, 10, 140, 250, 20, "Sélectionnés : ")
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
      s.s = "Sélectionnés : "
      
      i = 0
      While i < CountGadgetItems(0)
        If GetGadgetItemState(0, i)
          s + Str(i+1) + " "
        EndIf
        i + 1
      Wend
      
      SetGadgetText(1, s)
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf
Dri
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci docteur pour cette ordonnance.
Comme dab, tu ne t'embarasse pas de long discours :lol:

J'ai un peu complété ton code.
Comment corrigerais tu à nouveau le tiens/miens, pour qu'au premier clic de RAZ on ai bien aucun element selectionné.
Car dans celui la il faut 2 clic.

Code : Tout sélectionner

If OpenWindow(1, 0, 0, 270, 170, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(1)) 

 ListViewGadget(2, 10, 10, 250, 120, #PB_ListView_Multiselect) 
 TextGadget(1, 10, 140, 100, 20, "Sélectionnés : ") 
 ButtonGadget(3, 200, 140, 40, 20, "Raz")
 
 For a = 1 To 12 
  AddGadgetItem (2, -1, "Item " + Str(a) + " of the Listview") ; define listview content 
 Next 
    
 Repeat 

  Event = WaitWindowEvent() 
  EvenementGadget = EventGadget() 
  
  If Event = #PB_Event_Gadget 
 
   s.s = "Sélectionnés : " 
   i = 0 
 
   While i < CountGadgetItems(2) 
 
    If GetGadgetItemState(2, i) 
     s + Str(i+1) + " " 
     Delay(1)
    EndIf 
 
    i + 1 
 
   Wend 
      
   SetGadgetText(1, s) 
  
   If EvenementGadget = 3
    EvenementGadget = 0
    SetGadgetItemState(2, -1, 0) 
   EndIf
   
  EndIf 
    
 Until Event = #PB_Event_CloseWindow 
 
EndIf
Merci de votre aide 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

t'as juste mal placée la remise à zéro

Code : Tout sélectionner

If OpenWindow(1, 0, 0, 270, 170, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(1))

 ListViewGadget(2, 10, 10, 250, 120, #PB_ListView_Multiselect)
 TextGadget(1, 10, 140, 190, 20, "Sélectionnés : ")
 ButtonGadget(3, 210, 140, 40, 20, "Raz")
 
 For a = 1 To 12
  AddGadgetItem (2, -1, "Item " + Str(a) + " of the Listview") ; define listview content
 Next
   
 Repeat

  Event = WaitWindowEvent()
 
  If Event = #PB_Event_Gadget
  
    EvenementGadget = EventGadget()
   
     If EvenementGadget = 3
      EvenementGadget = 0
      SetGadgetItemState(2, -1, 0)
     EndIf
 
   s.s = "Sélectionnés : "
   i = 0
 
   While i < CountGadgetItems(2)
 
    If GetGadgetItemState(2, i)
     s + Str(i+1) + " "
     Delay(1)
    EndIf
 
    i + 1
 
   Wend
     
   SetGadgetText(1, s)
   
  EndIf
   
 Until Event = #PB_Event_CloseWindow
 
EndIf
Dri
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Parfait 8)

Je te remercie beaucoup de ton aide, ainsi que celle de DOBRO bien sur.

Et pour le clic en dehors des lignes selectionnable, ya pas un moyen de le detecter en dehors de la methode du gadget survolé par la souris.

Tu trouve ça normal que #PB_Event_Gadget ne le detecte pas ??
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

j'en sais franchement rien
c'est peut etre le comportement normal

Dri
Répondre