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

ListView multiselection [Résolu]

Message par Kwai chang caine »

Bonjour à tous.

Je viens de m'apercevoir d'un truc de ouf......

Dans une listview, si je fais une selection de la premiere ligne, mon compteur compte bien 1, jusqu'a la pas de bleme.

Mais quand je fais un clic sur la premiere ligne pour la selectionner, le compteur compte un, et que je tiens le shift pour cliquer sur la troisieme ligne afin que les 3 soit sélectionnées, et ben le compteur ne compte que 2 8O

Donc, il compte les clics et non pas les cases cochées, alors que l'instruction est bien GetGadgetItemState(3, ii) 8O

Ou ai-je encore gaffé ? :oops:

Code : Tout sélectionner

OpenWindow(1, 216, 20, 520, 450, "Fenetre",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
CreateGadgetList(WindowID(1))
ListViewGadget(3, 10, 30, 150, 400, #PB_ListView_Multiselect)
 
For i = 1 To 3 
 AddGadgetItem(3, -1, "a")       
Next
   
Repeat  
 
 Evenement = WaitWindowEvent () 
 
 If Evenement = #WM_LBUTTONDOWN
  ;                    Detection selection multiple
 
  For ii = 0 To CountGadgetItems(3) 
  
   If GetGadgetItemState(3, ii) = 1 
    ComptageSelection + 1
    Debug ComptageSelection
   EndIf
  
   If ComptageSelection > 1 
    SelectionMultiple = 1
    Break 
   Else
    SelectionMultiple = 0 
   EndIf
   
  Next   
  
 EndIf 

Until Evenement = #PB_Event_CloseWindow
Merci et bonne soirée
Dernière modification par Kwai chang caine le mer. 29/nov./2006 22:38, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

salut kwai,

Il y a plein de trucs qui vont pas dans ton code :)

Déjà il est préférable d'utiliser #PB_Event_xxxx à #WM_xxxx.
tant que tu peux t'en passer, hésite pas à utilise les commandes de purebasic.

Ensuite attention avec GetGadgetState()/GetGadgetItemState()
State peut revêtir plusieurs valeurs.
En effet elle peut etre #PB_ListIcon_Selected ET #PB_ListIcon_Checked.
Il vaut donc mieux utiliser le symbole '&' plutôt que '=', encore moins 'And'.

Et puis, j'aime bien encapsuler systématiquement dans une procédure quand il s'agit de bout de code réutilisable. Donc j'ai fais une petite procédure pratique : CountSelectedGadgetItems(gadget.l)

je peux te proposer une petite correction rapide si tu veux :

Code : Tout sélectionner

Procedure.l CountSelectedGadgetItems(gadget.l)
  
  Protected item.l, nSelected.l, nItems.l = CountGadgetItems(gadget) 
  
  For item = 0 To nItems - 1 
    If GetGadgetItemState(gadget, item) & #PB_ListIcon_Selected 
      nSelected + 1 
    EndIf 
  Next 
  
  ProcedureReturn nSelected 
  
EndProcedure

OpenWindow(1, 216, 20, 520, 450, "Fenetre",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
CreateGadgetList(WindowID(1))
ListViewGadget(3, 10, 30, 150, 400, #PB_ListView_Multiselect)
 
For i = 1 To 3
  AddGadgetItem(3, -1, "a")       
Next

Repeat 
  
  evenement = WaitWindowEvent()
  
  Select evenement
    
    Case #PB_Event_Gadget
      
      If EventGadget() = 3
          
        If EventType() = #PB_EventType_LeftClick
          
          ComptageSelection = CountSelectedGadgetItems(3)
          
          If ComptageSelection > 1
            SelectionMultiple = #True
          Else
            SelectionMultiple = #False
          EndIf
          
          Debug "=============" 
          Debug "SelectionMultiple = " + Str(SelectionMultiple) 
          Debug "ComptageSelection = " + Str(ComptageSelection) 
          
        EndIf
          
      EndIf
      
  EndSelect
  
Until evenement = #PB_Event_CloseWindow
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour FLYPE

Comme dab c'est parfait et exactement ce que je voulais :10: (Il va vraiment falloir qu'il créé un émoticone superieur a 10/10 pour toi) :wink:

Quand je vois tes codes et la tronche des miens, j'hésite à arreter de programmer :oops: La route est vraiment encore tres longue.......
Je sais même pas si elle se rallonge pas au fur et à mesure que je marche :lol:

J'ai honte :oops: , je ne savais meme pas que l'on pouvais mettre un "&" 8O
Je viens d'essayer, apparement ça ne marche que pour les constantes et dans ce genre d'utilisation. Par exemple on ne peut pas ecrire

Code : Tout sélectionner

a&1
debug a
Et tu va rire j'avais meme pas vu que j'avais mis un #WM_.
Tu va encore plus rire, j'avais meme pas vu la difference. :oops: donc qu'il y avait des PB et WM.
C'est affligeant :oops:

Mais à quoi correspondent ces lettres VK, WM etc ... 8O ?????

Alors la, j'ai encore bien fait de poser la question, j'etais encore pas pres de trouver tout seul :lol:

Au fait pendant que je te tiens :lol: tu n'a pas répondu a mes 2 dernieres questions du POST :

http://purebasic.hmt-forum.com/viewtopi ... 8704#58704

J'espere que je t'ai pas gonflé avec mes canons qui tirent partout. :lol:

Encore merci pour tout.
Les mots n'ont que peu de poid devant toutes les aides que tu m'apporte. 8)

Excelente soirée à toi.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

J'espere que je t'ai pas gonflé avec mes canons qui tirent partout.

>> heu non c'était meme plutot rigolo. mais je passe vite à autre chose. c'est un de mes défaut. mais tout viens a point à qui sait attendre :D

Mais à quoi correspondent ces lettres VK, WM etc

>> ce sont des constantes Windows (API Win32) - pas purebasic.
>> donc pas compatibles avec toutes les plateformes - juste avec windows.
>> les constantes #PB_xxxx t'assure que ca fonctionnera aussi sous MacOS ou Linux (bon à savoir si par hasard un jour tu devais t'y mettre) et puis au moins tu as la doc sous la main - tandis que les constantes windows ne sont pas forcément abordables et bien comprises pour les débutants.
>> enfin le tout c'est d'avoir les bons outils pour bien se documenter...


ton code 'a&1' fonctionne mais encore faut savoir à quoi çà correspond.

je te conseille d'aller voir la doc F1 -> Rubrique Variables, Types et Opérateurs ->Opérateurs (Tableau)
voici un petit bout de code qui montre à quoi - dans la pratique - ca pourrait te servir :

Code : Tout sélectionner

#FLAG_CHECKED  = $1
#FLAG_SELECTED = $2
#FLAG_OPTION1  = $4
#FLAG_OPTION2  = $8
#FLAG_OPTION3  = $10

variable = #FLAG_CHECKED | #FLAG_OPTION2 | #FLAG_OPTION1

If variable & #FLAG_CHECKED
  Debug "Coché"
EndIf

If variable & #FLAG_SELECTED
  Debug "Sélectionné"
EndIf

If variable & #FLAG_OPTION1
  Debug "Option 1"
EndIf

If variable & #FLAG_OPTION2
  Debug "Option 2"
EndIf

If variable & #FLAG_OPTION3
  Debug "Option 3"
EndIf

Quand je vois tes codes et la tronche des miens, j'hésite à arreter de programmer Embarassed La route est vraiment encore tres longue.......

>> la route vers quoi, kwai ? tout dépends de ce qu'on à faire.
>> et puis si t'es assidu et motivé ca vient vite, t'inquiètes.
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

La route pour t'arriver a la cheville pardi :lol:

En tout cas, je ne lasserais jamais de te remercier de ta gentillesse. 8)

Pour que mon neurone travaille demain matin au boulot, et que je puisse appliquer le super code corrigé que tu m'a donné sur les listview, je vais me coucher.

Si tu peux a l'occase en terminer avec mes canons, ça fait partie du meme programme que j'essaye de faire au boulot. :wink:

Bonne nuit et au plaisir de te relire
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 »

Kwai chang caine a écrit :ça fait partie du meme programme que j'essaye de faire au boulot. :wink:
vous avez des ordinateurs au Temple maintenant ? 8O
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

toujours le mot pour rire dobro :D
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Non c'est des bouliers :lol:

Mais j'ai bricolé des boules qui en se choquant entre elles créent un champ magnetique, qui sous l'impulsion fait varier l'intensité du mouvement, ce qui apour but de recreer le transistor, dans lequels (je te passe les details, je programme Purebasic et ensuite ............. :lol: :lol:

Bonne nuit a toi aussi DOBRO
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre