Page 1 sur 1
[R] Récuperation des valeurs d'une listview
Posté : mer. 12 juin 2013 13:32
par tomtomhonda
Bonjour;
Je cherche à récupérer les valeurs d'une multi selection sur une Listview:
Exemple:
ma listview est générer a partir d'in fichier texte, j'applique a ma listview les parametres suivants:
Code : Tout sélectionner
$ListView_Domain = GUICtrlCreateListView("", 2, 2, 394, 268,$LVS_REPORT, $LVS_SHOWSELALWAYS)
Ma listview est correctement généré avec la possibilité de selectionner plusieurs éléments mais mon probléme
suivient quand je désir récupérer l'ensemble des valeurs selectionées.
J'utilise la fonction guictrlread:
Code : Tout sélectionner
$Computer_name_Domain = StringReplace(GUICtrlRead(GUICtrlRead($ListView_Domain)), "|", "")
mais je n'arrive qu'a récupérer la premiere valeur.
Comment puis je récupérer toute les valeurs selectionné afin d'executer une tache sur l'ensemble des valeurs récupérer
comme avec un filereadline par exemple.
Merci d'avance
Re: [..] Récuperation des valeurs d'une listview
Posté : mer. 12 juin 2013 14:21
par mikell
Tu peux faire une boucle sur les items, vérifier s'ils sont sélectionnés et si oui récupérer le texte
Code : Tout sélectionner
$txt = ""
$count = ControlListView($gui, "", $listview, "GetItemCount")
For $i = 0 to $count-1
If ControlListView($gui, "", $listview, "IsSelected", $i) Then
$txt &= ControlListView($gui, "", $listview, "GetText", $i) & @crlf
EndIf
Next
Msgbox(0,"", $txt)
Re: [..] Récuperation des valeurs d'une listview
Posté : mer. 12 juin 2013 14:58
par tomtomhonda
Merci pour ton code
Mais il faudrais que sa m'affiche 1 msgbox par item et nom 1 msgbox
contenant tout les items selectionnés.
ainsi je pourrais executer l'action a chaque fois
exemple allumer les pcs selectionnée dans la listview
j'ai modifier ton code sa marche pour moi mais est que c'est propre
Code : Tout sélectionner
$txt = ""
$count = ControlListView($gui, "", $ListView_Domain, "GetItemCount")
For $i = 0 to $count-1
If ControlListView($gui, "", $ListView_Domain, "IsSelected", $i) Then
$txt &= ControlListView($gui, "", $ListView_Domain, "GetText", $i) & @crlf
Msgbox(0,"", $txt)
$txt = ""
EndIf
next
Re: [..] Récuperation des valeurs d'une listview
Posté : mer. 12 juin 2013 19:07
par mikell
Pas tout à fait
Si tu veux traiter les résultats un par un successivement tu n'as pas besoin de concaténer le texte
Code : Tout sélectionner
Local $txt
$count = ControlListView($gui, "", $ListView_Domain, "GetItemCount")
For $i = 0 to $count-1
If ControlListView($gui, "", $ListView_Domain, "IsSelected", $i) Then
$txt = ControlListView($gui, "", $ListView_Domain, "GetText", $i) & @crlf
Msgbox(0,"", $txt)
EndIf
Next
Re: [..] Récuperation des valeurs d'une listview
Posté : jeu. 13 juin 2013 13:04
par tomtomhonda
Bonjour en fait je veux pouvoir exécuter une autre boucle type while sur un fichier texte
si la chaine existe je fait l'action sinon je passe au suivant.
Le problème c'est qu'avec se script il traite la première boucle intégralement du coup sa ne pas.
Code : Tout sélectionner
Local $txt
$count = ControlListView($gui, "", $ListView_Domain, "GetItemCount")
For $i = 0 to $count-1
If ControlListView($gui, "", $ListView_Domain, "IsSelected", $i) Then
$txt = ControlListView($gui, "", $ListView_Domain, "GetText", $i) & @crlf
Msgbox(0,"", $txt)
EndIf
Next
ou puis je placer ma boucle while ?
genre
Code : Tout sélectionner
$file = fileopen(monfichier)
While 1
Local $line = FileReadLine($file)
(je recherche la chaine de caractére si elle existe je fait l'action)
If @error = -1 Then ExitLoop
WEnd
Re: [..] Récuperation des valeurs d'une listview
Posté : jeu. 13 juin 2013 14:28
par mikell
Là on est typiquement dans le cas où tu as intérêt à te créer une fonction perso dans laquelle tu peux mettre le 2ème traitement, exemple
Code : Tout sélectionner
Local $txt
$count = ControlListView($gui, "", $ListView_Domain, "GetItemCount")
For $i = 0 to $count-1
If ControlListView($gui, "", $ListView_Domain, "IsSelected", $i) Then ; si l'item est sélectionné
$txt = ControlListView($gui, "", $ListView_Domain, "GetText", $i) ; lit le texte de l'item
_MaFonction($txt) ; lance la fonction perso avec la valeur de $txt comme paramètre
EndIf
Next
Func _MaFonction($str)
Msgbox(0,"", $str)
EndFunc
Re: [..] Récuperation des valeurs d'une listview
Posté : jeu. 13 juin 2013 15:36
par tomtomhonda
Merci encore a toi je vois âprement le bout du tunnel je suis pas programmeur et je galère beaucoup.
J'ai quand même déjà prog en autoit mais je saisie pas tout car beaucoup de fonction.
Je te met mon bout de code test
âprement sa fonctionne j'attend de tester sur ma while
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListviewConstants.au3>
Example()
Func Example()
Local $listview, $button, $item1, $item2, $item3, $msg
GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x00E0FFFF) ; will change background color
$listview = GUICtrlCreateListView(" ", 10, 10, 100, 150, $LVS_REPORT, $LVS_SHOWSELALWAYS)
$button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
$item1 = GUICtrlCreateListViewItem("item2|", $listview)
$item2 = GUICtrlCreateListViewItem("item1|", $listview)
$item3 = GUICtrlCreateListViewItem("item3|", $listview)
GUICtrlCreateInput("", 20, 200, 150)
GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
GUISetState()
Do
$msg = GUIGetMsg()
Select
Case $msg = $button
Local $txt
$count = ControlListView("", "", $listview, "GetItemCount")
For $i = 0 to $count-1
If ControlListView("", "", $listview, "IsSelected", $i) Then ; si l'item est sélectionné
$txt = ControlListView("", "", $listview, "GetText", $i) ; lit le texte de l'item
_MaFonction($txt) ; lance la fonction perso avec la valeur de $txt comme paramètre
EndIf
Next
Case $msg = $listview
MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example
Func _MaFonction($str)
Msgbox(0,"", $str)
$ping = ping($str)
Msgbox(0,"", $str & " résultat ping " & $ping)
EndFunc
Re: [..] Récuperation des valeurs d'une listview
Posté : jeu. 13 juin 2013 16:54
par mikell
OK, n'oublie pas de mettre la balise [R] dans le titre de ton 1er post quand le pb aura été âprement résolu
