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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
Dernière modification par Ar-S le lun. 16/févr./2015 23:26, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

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

Message 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.
Répondre