[R] Récupérer la valeur des ChekBox dans une listview

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
luxus
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 16 mai 2011 14:06
Status : Hors ligne

[R] Récupérer la valeur des ChekBox dans une listview

#1

Message par luxus »

Bonjour à tous,

Je réalise un programme qui répertorie des logiciels sans licence, pour que les utilisateurs de ma boite puissent les installer simplement eux-mêmes.
Pour ce faire j'ai une listview avec des checkbox à l'intérieur.
Pour plus de facilité au niveau de la maintenance de cet outil, tous est dynamique (les noms et emplacements des exécutables sont renseigné dans des fichiers ini)

Voilà le code du programme :
► Afficher le texte
Voilà mes fichiers INI :

Fichier param_xp.ini
► Afficher le texte
Fichier param_7.ini
Identique pour le moment

Fichier param_site.ini
► Afficher le texte
Jusque là, j'ai réussi!! (pas sans mal :p) Mon problème est de récupérer le chemin complet de l'exécutable des box qui ont été cochées.
J'arrive à récupérer tous les chemins complets, mais pas uniquement ceux que j'ai cochées…
Mon problème est à la ligne :
If _IsChecked($Checks[$x]) Then
La variable $Checks ne correspond à rien dans ce script mais à une ancienne version .
Ancienne version :
► Afficher le texte
Je ne voie pas comment la remplacer…

J'espère avoir été assez claire dans mon explication.

Merci de votre aide :)
Modifié en dernier par luxus le mer. 12 oct. 2011 16:15, modifié 1 fois.
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#2

Message par Strofe »

Bonsoir

va voir de ce côté

_GUICtrlListView_GetItemChecked

A+
Y a pas de problème, y a que des solutions. Reste à les trouver.
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#3

Message par Strofe »

Bonsoir

Quand la curiosité nous ronge..... :roll:
► Afficher le texte
Y a pas de problème, y a que des solutions. Reste à les trouver.
Avatar du membre
luxus
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 16 mai 2011 14:06
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#4

Message par luxus »

Bonjour,

Merci pour la réponse :)

On se rapproche de ce que je voulais comme résultat par contre j'ai décalage de 1.
Quand je sélectionne un logiciel dans liste, c'est l’exécutable de la ligne du dessous qui est prit en compte.

Dans mon exemple, si je sélectionne "vlc" c'est l'exécutable de pdf_creator (qui est sur le ligne du dessous) qui se lance. (ou alors j'ai mal compris votre solution...)
Avatar du membre
luxus
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 16 mai 2011 14:06
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#5

Message par luxus »

Je viens de regarder avec AutoIt Debugger et je m'aperçois que la valeur $listview est égale à 7 or j'ai 8 lignes... Je pense que la différence vient de là, mais je ne me l'explique pas.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#6

Message par GaRydelaMer »

Bonjour

je me suis fais une fonction pour ca:
Tu as au choix ($fArray) une chaine ou un tableau des index de ta listview dont l'item est coché.

Code : Tout sélectionner

; #FUNCTION# ====================================================================================================================
; Name...........: _GUICtrlListView_GetCheckedIndices
; Description ...: Retrieve indices of Checked item(s)
; Syntax.........: _GUICtrlListView_GetCheckedIndices($hWnd, $fArray = False)
; Parameters ....: $hWnd        - Handle to the control
;                  $fArray      - Return string or Array
;                   |True   - Returns array
;                   |False  - Returns pipe "|" delimited string
; Return values .: Success      - Selected indices Based on $fArray:
;                  +Array       - With the following format
;                  |[0] - Number of Items in array (n)
;                  |[1] - First item index
;                  |[2] - Second item index
;                  |[n] - Last item index
;                  |String      - With the following format
;                  |"0|1|2|n"
;                  Failure      - Based on $fArray
;                  |Array       - With the following format
;                  |[0] - Number of Items in array (0)
;                  |String      - Empty ("")
; Author ........: Gary delaMer
; Modified.......:
; Remarks .......:
; Related .......: _GUICtrlListView_GetSelectedIndices
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func My_GUICtrlListView_GetCheckedIndices($hWnd, $bArray = False)
    If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)

    Local $i = 0, $iCount = _GUICtrlListView_GetItemCount($hWnd)
    Local $sIndices, $aIndices[$iCount + 1] = [0]
    For $iItem = 0 To $iCount - 1
        If _GUICtrlListView_GetItemChecked($hWnd, $iItem) Then
            If (Not $bArray) Then
                If StringLen($sIndices) Then
                    $sIndices &= "|" & $iItem
                Else
                    $sIndices = $iItem
                EndIf
            Else
                $i += 1
                $aIndices[$i] = $iItem
            EndIf
        EndIf
    Next
    If (Not $bArray) Then
        Return String($sIndices)
    Else
        $aIndices[0] = $i
        ReDim $aIndices[$i + 1]
        Return $aIndices
    EndIf
EndFunc   ;==>My_GUICtrlListView_GetCheckedIndices
 
Warlh
Niveau 1
Niveau 1
Messages : 3
Enregistré le : dim. 09 oct. 2011 23:50
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#7

Message par Warlh »

luxus a écrit :Je viens de regarder avec AutoIt Debugger et je m'aperçois que la valeur $listview est égale à 7 or j'ai 8 lignes... Je pense que la différence vient de là, mais je ne me l'explique pas.
Euh, je crois que c'est normal de trouver 7 à la valeur de $listview si tu as 8 lignes.
En commençant à compter de 0 à 7, ça fait bien 8 lignes.
Avatar du membre
luxus
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 16 mai 2011 14:06
Status : Hors ligne

Re: [R] Récupérer la valeur des ChekBox dans une listview

#8

Message par luxus »

@Warlh
après avoir fait qq tests, je me suis rendu compte que c'était un indice (la valeur est fix)

Après plusieurs essais, J'arrive à lancer le bon programme :
► Afficher le texte
Par contre j'ai un peu de mal à me servie de ta fonction GaRydelaMer.
Je m'en sers uniquement pour savoir si aucune checkbox n'est coché, mais il doit y avoir une meilleure façon l'exploiter...

Si tu pouvais me donner un exemple ça me permettrait de mieux la comprendre.

En tous cas merci à tous :)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#9

Message par Tlem »

Il vous suffit d'utiliser My_GUICtrlListView_GetCheckedIndices avec le handle retourné par votre ListView ($hWnd) et en choisissant le type de sortie désiré ($bArray).

Si $bArray est égal à True, alors vous aurez en retour un tableau contenant les différents index qui seraient cochés. Si $bArray est égal à False (valeur par défaut), alors vous aurez une chaine de la forme '1|4|5' contenant les index qui seraient cochés.

Donc $aIdx = My_GUICtrlListView_GetCheckedIndices($hWnd, True) renvoi dans la variable $aIdx un tableau contenant tous les indices cochés de la ListView $hWnd.
Une simple boucle de lecture For/Next vous permettra d'exploiter les valeurs de ce tableau.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Récupérer la valeur des ChekBox dans une listview

#10

Message par mikell »

Et ça ?

Code : Tout sélectionner

$text = ""
$nb = ControlListView ("APLLI", "", $listview, "GetItemCount")
For $i = 0 To $nb-1
    If _GUICtrlListView_GetItemChecked ($listview, $i) Then
        $text &= ControlListView ("APLLI", "", $listview, "GetText", $i, 1) & @CRLF
    EndIf
Next
MsgBox(0,"", $text)
C'est un peu ce qu'a fait GaRydelaMer mais en plus simple
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
luxus
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 16 mai 2011 14:06
Status : Hors ligne

Re: [R] Récupérer la valeur des ChekBox dans une listview

#11

Message par luxus »

Merci à tous pour vos explications Telm !

@ mikell : Je vais regarder ça :)

En tous cas merci à tous :)
Répondre