Page 1 sur 1
Detection selection listview multiselection [Résolu]
Publié : jeu. 07/déc./2006 17:56
par Kwai chang caine
Bonjour à tous.
Je viens de m'appercevoir d'un truc horrible
Et seulement au bout d'un an et demi
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.
Mes questions c'est:
1/ Pourquoi l'etat de départ change avec le multiselect ?
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
Publié : jeu. 07/déc./2006 18:47
par Backup
ben oui c'est pas tres logique,
il te suffis de considerer l'element 0 comme element par defaut

Publié : jeu. 07/déc./2006 18:54
par Dr. Dri
y'a pas de "il suffit"
c'est un bug voila tout (j'ai pas vérifié mais bon...)
Dri
Publié : jeu. 07/déc./2006 19:15
par Backup
non seulement mais a priori aucune commande n'existe pour recuperer les multiples sélections !!

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
Publié : ven. 08/déc./2006 9:55
par Dr. Dri
il faut boucler pour les multisélections, le gadgetstate indique la 1ere ligne sélectionnée
Dri
Publié : ven. 08/déc./2006 10:41
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é
On peut cliquer comme un malade partout et que dal
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

Publié : ven. 08/déc./2006 13:12
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
Publié : ven. 08/déc./2006 15:44
par Kwai chang caine
Merci docteur pour cette ordonnance.
Comme dab, tu ne t'embarasse pas de long discours
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

Publié : ven. 08/déc./2006 15:55
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
Publié : ven. 08/déc./2006 16:23
par Kwai chang caine
Parfait
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 ??
Publié : ven. 08/déc./2006 18:44
par Dr. Dri
j'en sais franchement rien
c'est peut etre le comportement normal
Dri