Page 1 sur 1
[R] Récupérer l'item selectionné d'une ListView à colonnes
Posté : jeu. 10 déc. 2009 09:32
par Habibsbib
Bonjour,
Tout est dans le titre. Voilà un exemple, que j'appliquerais à mon code :
Code : Tout sélectionner
GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x00E0FFFF)
$listview = GUICtrlCreateListView("Processus|UC", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$List = ProcessList()
For $x = 2 To $List[0][0]
GUICtrlCreateListViewItem($List[$x][0] & "|" ,$listview)
Next
GUISetState()
A côté de ça, j'ai donc une boucle principale, avec un bouton en bas.
Question : comment faire interagir le bouton et la liste, en récupérant le texte du premier Item de la ligne sélectionnée quand le bouton est pressé ? J'ai déja essayé avec _GUICtrlListView_GetItemSelected, mais j'ai rien compris

Comment faire ? (à noter que mes recherches sur le fofo n'ont rien donné non plus).
Merci de votre aide, Habib.
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : ven. 11 déc. 2009 00:37
par Tlem
_GUICtrlListView_GetItemSelected sert à savoir si l'item est sélectionne ou non.
Pour votre besoin, utilisez :
Code : Tout sélectionner
#Include <GuiListView.au3>
Case $Bouton1
$Indice = _GUICtrlListView_GetSelectedIndices($listview)
MsgBox(0, '', $Indice)
Attention l'index est sur une base zéro.

Re: [..] Récupérer l'item selectionné d'une ListVi
Posté : ven. 11 déc. 2009 10:02
par Habibsbib
Merci beaucoup, je vais m'aider de ça et voir si ça marche.

Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : ven. 11 déc. 2009 19:16
par Tlem
Cela fonctionne puisque je vous ai mis le code que j'ai testé.

Sinon, je vous aurait donné que le nom de la fonction.

Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : ven. 11 déc. 2009 19:54
par Habibsbib
Habibsbib a écrit : Voilà un exemple, que j'appliquerais à mon code...
En plus, je ne suis pas sûr que ça corresponde à mes besoins, c'est pour ça que je préciserais plus tard

Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : sam. 12 déc. 2009 11:15
par Tlem
Cela n'empêche que la réponse à la question à été donnée. Donc => [R].

Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 13:33
par Habibsbib
Peut être que je me suis mal exprimé, mais j'ai bien précisé vouloir obtenir le texte de l'item, et pas son classement dans la liste. Merci quand même. Quelqu'un a-t'il une autre solution ?
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 14:09
par Yogui
ben ça fonctionne
dans cette exemple j'utilise deux approche
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Local $Indice
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 282, 235, 192, 124)
GUISetBkColor(0x00E0FFFF)
$btnsolyog = GUICtrlCreateButton("Ex yogui", 160, 174, 100, 30, $BS_FLAT)
$btnsolTlem = GUICtrlCreateButton("EX tlem", 160, 204, 100, 30, $BS_FLAT)
$listview = GUICtrlCreateListView("Processus|UC", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$List = ProcessList()
For $x = 2 To $List[0][0]
GUICtrlCreateListViewItem($List[$x][0] & "|", $listview)
Next
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btnsolyog
$PCnok = GUICtrlRead(GUICtrlRead($listview))
$PCnok = StringSplit($PCnok, "|")
$PCnok = $PCnok[1]
MsgBox(0, "", $PCnok)
Case $btnsolTlem
$Indice = _GUICtrlListView_GetSelectedIndices($listview)
If $Indice < 0 Then
MsgBox(0, "", "merci de séléctionner une ligne")
Else
;MsgBox(0, '', $Indice)
MsgBox(0, '', $List[$Indice + 2][0]&" --> "&$List[$Indice + 2][1])
EndIf
EndSwitch
WEnd
édit pour corriger un petit bug et surtout pour ajouter que la solution la plus propre est celle de Tlem (comme toujours) puisqu'elle permet de récupérer l'indice du tableau et donc d'afficher directement la valeur de la seconde colonne
re - édit pour retirer l'affichage de l'indice (msgbox) qui semble gèner
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 14:25
par Habibsbib
Pourtant ce bout de code m'a retourné un nombre alors que je veux directement récupérer le texte de l'item. Je veux dire, si la liste est :
.process1.exe
.process2.exe
.process3.exe
et que c'est .process2.exe qui est selectionné, et ben je veux que mon script me retourne directement ".process2.exe". Est-ce possible ?
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 14:34
par Yogui
au vu de votre réponse vous n'avez pas testé mon code ...
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 17:33
par Habibsbib
Vraiment confus... je passe cnore pour un boulet ce coup là ^^ Effectivement votre code marche, merci de votre réponse. J'avais essayé de stocker cette commande dans une variable, puis de récupérer le texte avec une array, mais cela n'avait pas marché. Je vais ré-essayer, et donner des retours. Je passe en résolu, pour ne pas énerver Tlem.
Merci, et pardonnez mon manque d'attention

EDIT: pourtant, j'ai ré-essayé le code de Tlem, mais cela ne donnait qu'un numéro. Je ne suis pas fou, tout de même ^^ Merci de votre réponse Yogui.
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 17:51
par Yogui
Je ne comprend pas mon code utilise une méthode perso mais aussi la methode de Tlem les deux boutons donné bien la même solution avec un + pour celle de Tlem car elle permet justement de récupérer l'indice de ligne et donc de récupérer les info des colonnes :s
Code : Tout sélectionner
$Indice = _GUICtrlListView_GetSelectedIndices($listview)
If $Indice < 0 Then
MsgBox(0, "", "merci de séléctionner une ligne")
Else
;MsgBox(0, '', $Indice)
MsgBox(0, '', $List[$Indice + 2][0]&" --> "&$List[$Indice + 2][1])
c'est bien le code de Tlem la :s

Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 17:58
par Habibsbib
Si tu regardes bien, non ce n'est pas ce qu'il a mis...
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 21:34
par Yogui
Tlem a écrit : $Indice = _GUICtrlListView_GetSelectedIndices($listview)
Yogui a écrit :$Indice = _GUICtrlListView_GetSelectedIndices($listview)
effectivement il à mis une tabulation est pas moi :p
Re: [..] Récupérer l'item selectionné d'une ListView à colonnes
Posté : lun. 14 déc. 2009 22:16
par Tlem
Habibsbib a écrit :pourtant, j'ai ré-essayé le code de Tlem, mais cela ne donnait qu'un numéro. Je ne suis pas fou, tout de même ^^
C'est bien ce que le code que j'ai donné est sensé faire car à l'origine, vous n'aviez pas précisé que vous vouliez le texte de l'item (sinon j'aurais rajouté une simple fonction).
Mon code était :
Code : Tout sélectionner
#Include <GuiListView.au3>
Case $Bouton1
$Indice = _GUICtrlListView_GetSelectedIndices($listview)
MsgBox(0, '', $Indice)
J'avais mis l'include pour vous éviter de chercher et ensuite si vous regardez bien, la variable s'appelle
$Indice cela sous entend qu'il s'agit d'un nombre et non d'un texte.
Si il avait été précisé qu'il fallait le texte de l'indice, j'aurais rajouté l'utilisation de la fonction
_GUICtrlListView_GetItemText() qui retourne le texte d'un Item en fonction de son indice.
Cela aurait pu ce résumer à ceci :
Code : Tout sélectionner
#Include <GuiListView.au3>
Case $Bouton1
MsgBox(0, 'Texte de la sélection', _GUICtrlListView_GetItemText($listview, _GUICtrlListView_GetSelectedIndices($listview)))
Re: [R] Récupérer l'item selectionné d'une ListView à colonnes
Posté : mar. 15 déc. 2009 09:59
par Habibsbib
Habibsbib a écrit :comment faire interagir le bouton et la liste, en récupérant le texte du premier Item de la ligne sélectionnée quand le bouton est pressé ?
Merci de votre dernière réponse, elle marche parfaitement.
Re: [R] Récupérer l'item selectionné d'une ListView à colonnes
Posté : mar. 15 déc. 2009 20:40
par Tlem
Certes, mais cette partie du texte n'y était pas au début.
Dernière édition par Habibsbib le Lun 14 Déc 2009 à 17:58, édité 1 fois.

Re: [R] Récupérer l'item selectionné d'une ListView à colonnes
Posté : mer. 16 déc. 2009 10:16
par Habibsbib
Je n'ai pas rajouté cette partie du texte, mais j'ai corrigé les coquilles que j'avait glissées dans le texte, et j'ai précisé que mes recherches n'avaient rien donné. Je n'ai pas edité cette partie, j'en suis sûr.
Merci de vos réponses, j'ai terminé la partie récup' des items de mon code, et ça marche à la perfection.
Re: [R] Récupérer l'item selectionné d'une ListView à colonnes
Posté : mer. 16 déc. 2009 22:02
par ayuckers
je me permet de rajouter une solution en partant de la solution donné par Tlem :
oici le bout de code sorti de son context :
► Afficher le texte
Code : Tout sélectionner
$Indice = _GUICtrlListView_GetSelectedIndices($ListView) ; récupere l'indice de la ligne sélectionné
$Item = _GUICtrlListView_GetItem($ListView,int($Indice),0); Le 0 permet de recuperer dans la colonne 1
MsgBox(4160, "Text : ", $Item[3]); ici $Item[3] pour recuperer la parti text
voici le code intégré a l'exemple :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <GUIListBox.au3>
Local $Indice
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 282, 235, 192, 124)
GUISetBkColor(0x00E0FFFF)
$btnsolyog = GUICtrlCreateButton("Ex Yogui", 160, 174, 100, 30, $BS_FLAT)
$btnsolTlem = GUICtrlCreateButton("EX Tlem", 160, 204, 100, 30, $BS_FLAT)
$btnsolAyu = GUICtrlCreateButton("EX Ayuckers", 60, 204, 100, 30, $BS_FLAT)
$hlistview = GUICtrlCreateListView("Processus|UC", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$List = ProcessList()
For $x = 2 To $List[0][0]
GUICtrlCreateListViewItem($List[$x][0] & "|", $hlistview)
Next
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; *************** ordre croissant et decroissant **********************************
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btnsolyog
$PCnok = GUICtrlRead(GUICtrlRead($hlistview))
$PCnok = StringSplit($PCnok, "|")
$PCnok = $PCnok[1]
MsgBox(0, "", $PCnok)
Case $btnsolTlem
$Indice = _GUICtrlListView_GetSelectedIndices($hlistview)
If $Indice < 0 Then
MsgBox(0, "", "merci de séléctionner une ligne")
Else
;MsgBox(0, '', $Indice)
MsgBox(0, '', $List[$Indice + 2][0]&" --> "&$List[$Indice + 2][1])
EndIf
Case $btnsolAyu
$Indice = _GUICtrlListView_GetSelectedIndices($hListView) ; récupere l'indice de la ligne sélectionné
$Item = _GUICtrlListView_GetItem($hListView,int($Indice),0); Le 0 permet de recuperer dans la colonne 1
MsgBox(4160, "Text : ", $Item[3]); ici $Item[3] pour recuperer la parti text
EndSwitch
WEnd
;****************************************************************************************************************************
;****************************************************************************************************************************
;****************************************************************************************************************************
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Voila j'ai rajouter la fonction qui permet de classer la ListView par ordre Alphabétique et Maintenant le _GUICtrlListView_GetSelectedIndices fonctionne a condition d'utiliser un _GUICtrlListView_GetItem