Page 1 sur 1

[OK] ListViewGadget et élément non séléctionné

Publié : lun. 16/févr./2015 17:21
par Ar-S
Salut,
Je suis en train de me faire un gestionnaire de clients teamviewer.
J'utilise un listviewgadget pour afficher leur nom.
J'ai un petit soucis surement déjà croisé mais je ne trouve pas la solution et ça me pique un peu là.
Lorsque je clic sur un nom de la liste, son numéro (Element) s'affiche bien, mais je souhaiterai que si je clic en dehors d'un nom (mais même dans le même gadget) Element prenne le numéro -1
Il me semble que le gadget est sensé faire ça mais ça me renvoie le dernier élément ciblé.
Merci

Code : Tout sélectionner

Case #ListClient  ; Mon listviewgadget()
          Select EventType()
            Case  #PB_EventType_LeftClick
              Element = GetGadgetState(#ListClient) 
              Debug "Element : " + Element
              If Element > -1 
                Debug GetGadgetItemText(#ListClient,GetGadgetState(#ListClient),0)
              EndIf  
          EndSelect

Re: ListViewGadget et élément non séléctionné

Publié : lun. 16/févr./2015 19:51
par falsam
Apparement GetGadgetState() ne fonctionne pas de la même manière selon le gadget que tu utilises.

- Si c'est un ListIconGadget() se sera bien le premier élément sélectionné qui sera pris en compte ou -1 si aucun.

- Le ListViewGadget() fonctionne différemment car tu auras toujours un élément sélectionné à partir du moment ou tu auras sélectionné au moins un élément. GetGadgetState() retourne dans ce cas l’élément qui est resté sélectionné.

L'aide en anglais est plus subtil que la version française à se sujet.
- ListIconGadget(): returns the first selected item index, -1 if none is selected.
- ListViewGadget(): returns the currently selected item index, -1 if none is selected.
Il est possible que je raconte des conneries et que finalement il s'agit bien d'un bug :)

La solution serait de passer par le ListIconGadget() je pense.

Un petit bout de code pour finaliser tout ça

Code : Tout sélectionner

Enumeration
  #Mainform
  #ListClients
EndEnumeration

Declare Start()

start()

Procedure OnClientSelect()
  Debug GetGadgetState(#ListClients)
EndProcedure

Procedure Start()
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListViewGadget(#ListClients, 10, 10, 480, 380)
  ;ListIconGadget(#ListClients, 10, 10, 480, 380, "Client", 475, #PB_ListIcon_FullRowSelect)
  
  BindGadgetEvent(#ListClients, @OnClientSelect(), #PB_EventType_LeftClick)
    
  For i = 0 To 9
    AddGadgetItem(#ListClients, -1, "Client n° " + Str(i))
  Next
    
  Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndProcedure

Re: ListViewGadget et élément non séléctionné

Publié : lun. 16/févr./2015 23:25
par Ar-S
Merci Falsam, en ListIconGadget y'a effectivement pas se probleme. J'opte pour :)
C'est un peu con quand même pour le listview. 8)

Re: [OK] ListViewGadget et élément non séléctionné

Publié : mar. 17/févr./2015 11:58
par Mesa
Avec un listView ça marche aussi :

Code : Tout sélectionner

OpenWindow(0,0,0,300,300,"ListViewGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListViewGadget(0,0,0,300,200)
AddGadgetItem(0,-1,"Client n°0 - azerty")
AddGadgetItem(0,-1,"Client n°1 - qsdfgh")
AddGadgetItem(0,-1,"Client n°2 - wxcvbn")
SetGadgetState(0,0)
selection=GetGadgetState(0)

Repeat
  Event=WaitWindowEvent()
  
  ;Si on clique dans la fenêtre = Désélection
  If Event=#PB_Event_LeftClick 
   If GetGadgetState(0)=selection
        SetGadgetState(0,-1)
    EndIf 
  EndIf
  
  ;Si on clique sur dans la listview = Sélection/Désélection
  If Event=#PB_Event_Gadget
    Select EventGadget()
      Case 0
        ;selection=GetGadgetState(0)
        If GetGadgetState(0)=selection
          SetGadgetState(0,-1)
        EndIf
          selection=GetGadgetState(0)
    EndSelect
    Debug GetGadgetState(0)
  EndIf
Until Event=#PB_Event_CloseWindow
M.