Page 1 sur 1

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

Posté : jeu. 06 oct. 2011 19:19
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 :)

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

Posté : jeu. 06 oct. 2011 21:08
par Strofe
Bonsoir

va voir de ce côté

_GUICtrlListView_GetItemChecked

A+

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

Posté : jeu. 06 oct. 2011 21:16
par Strofe
Bonsoir

Quand la curiosité nous ronge..... :roll:
► Afficher le texte

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

Posté : ven. 07 oct. 2011 12:28
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...)

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

Posté : ven. 07 oct. 2011 12:37
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.

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

Posté : ven. 07 oct. 2011 12:49
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
 

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

Posté : dim. 09 oct. 2011 23:57
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.

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

Posté : lun. 10 oct. 2011 18:36
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 :)

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

Posté : lun. 10 oct. 2011 20:54
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.

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

Posté : lun. 10 oct. 2011 23:03
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

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

Posté : mer. 12 oct. 2011 16:13
par luxus
Merci à tous pour vos explications Telm !

@ mikell : Je vais regarder ça :)

En tous cas merci à tous :)