Page 1 sur 1
Evenements GUI
Posté : jeu. 10 août 2017 13:05
par danylarson
Bonjour,
Est il possible de capturer un événement "je change de valeur" dans une listview (equivalent de onchange en vb).
Si jamais ce n'est pas possible est ce possible que je capture l evenement "j appuie sur entrée" sur une ligne de ma listview
L'idée est d actualiser tout les champs de mon gui quand je selectionne une ligne de ma listview
Si c'est possible pouvez vous me donner un exemple de code ?
Merci pour tout
Re: Evenements GUI
Posté : jeu. 10 août 2017 18:55
par walkson
Bonjour,
Faites une recherche sur GUIListViewEx.au3 (de Melba si je me trompe)
Autrement, pour une "écoute" d'une listview: WM_NOTIFY
Une remarque, en principe, "le bout de gras", c'est celui qui pose la question (son code en exemple) avec son problème. Autrement, il est difficile de vous répondre !
Re: Evenements GUI
Posté : jeu. 10 août 2017 19:44
par mikell
Complément à la réponse de walkson :
On peut touver la liste des notifications pour une Listview dans le fichier d'aide, fonction _GUICtrlListView_Create (par exemple $LVN_ITEMACTIVATE)
Le code d'exemple y est très complet
Re: Evenements GUI
Posté : ven. 11 août 2017 13:23
par danylarson
Merci pour vos Reponses
Alors pour aller plus dans le "gras" voici un code example, qui aidera à mieux cerner mon besoin:
#include <GUIConstantsEx.au3>#include <MsgBoxConstants.au3>#include <WindowsConstants.au3>Example
()Func Example
() GUICreate("Mon Gui", 440, 250, 100, 200, -1, $WS_EX_ACCEPTFILES) Local $idListview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING) Local $idItem1 = GUICtrlCreateListViewItem("item2|col22|col23", $idListview) Local $idItem2 = GUICtrlCreateListViewItem("item1|col12|col13", $idListview) Local $idItem3 = GUICtrlCreateListViewItem("item3|col32|col33", $idListview) $MonChamp = GUICtrlCreateInput("", 220, 10, 200,30) GUISetState(@SW_SHOW) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idListview MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2) EndSwitch WEndEndFunc ;==>Example
Et ce que je recherche :
a) en me deplacant au clavier dans ma listview je fait apparaitre dans la textbox ma selection (la ligne entiere de ma listview en bleu)
b) Si la a n'est pas possible je souhaiterais lorsque j'appuie sur entrée faire apparaitre dans ma texte box le contenu de ma selection
Pour le code WM_NOTIFY j'ai besoin d'eviter de m en servir
Pour $LVN_ITEMACTIVATE, je vais voir dans l'aide si je trouve quelque chose d interresant (et bien sur si je trouve tout seul je poste ma solution)
Merci pour tout
Re: Evenements GUI
Posté : dim. 13 août 2017 02:33
par walkson
Bonjour,
Avec la touche Entrée
#include <GUIConstantsEx.au3>#include <MsgBoxConstants.au3>#include <WindowsConstants.au3>Example
()Func Example
() GUICreate("Mon Gui", 440, 250, 100, 200, -1, $WS_EX_ACCEPTFILES) Global $idListview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING) Local $idItem1 = GUICtrlCreateListViewItem("item2|col22|col23", $idListview) Local $idItem2 = GUICtrlCreateListViewItem("item1|col12|col13", $idListview) Local $idItem3 = GUICtrlCreateListViewItem("item3|col32|col33", $idListview) Global $MonChamp = GUICtrlCreateInput("", 220, 10, 200,30) GUISetState(@SW_SHOW) HotKeySet ( "{ENTER}" , "listviewread" ) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idListview MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2);réagit sur clic d'entête des colonnes EndSwitch WEndEndFunc ;==>ExampleFunc listviewread
() $AAA = StringReplace(GUICtrlRead(GUICtrlRead($idListview)),"|"," ") GUICtrlSetData($MonChamp,$AAA)EndFunc
Si on utilisait WM_NOTIFY, la touche entrée serait inutile. La simple sélection suffirait.
Re: Evenements GUI
Posté : dim. 13 août 2017 09:53
par mikell
Pour le code WM_NOTIFY j'ai besoin d'eviter de m en servir
Pourquoi diable ??
@walkson
Dans ce genre de cas je préfère un accélérateur à une hotkey - surtout pour la touche Enter
#include <GUIConstantsEx.au3>#include <MsgBoxConstants.au3>#include <WindowsConstants.au3>Example
()Func Example
() GUICreate("Mon Gui", 440, 250, 100, 200, -1, $WS_EX_ACCEPTFILES) Global $idListview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING) Local $idItem1 = GUICtrlCreateListViewItem("item2|col22|col23", $idListview) Local $idItem2 = GUICtrlCreateListViewItem("item1|col12|col13", $idListview) Local $idItem3 = GUICtrlCreateListViewItem("item3|col32|col33", $idListview) Global $MonChamp = GUICtrlCreateInput("", 220, 10, 200,30) Local $idUser = GUICtrlCreateDummy() Local $aAccelKeys[1][2] = [["{ENTER}", $idUser]] GUISetAccelerators
($aAccelKeys) GUISetState(@SW_SHOW) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idListview MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2);réagit sur clic d'entête des colonnes Case $idUser listviewread
() EndSwitch WEndEndFunc ;==>ExampleFunc listviewread
() $AAA = StringReplace(GUICtrlRead(GUICtrlRead($idListview)),"|"," ") GUICtrlSetData($MonChamp,$AAA)EndFunc
Re: Evenements GUI
Posté : dim. 13 août 2017 14:13
par walkson
J'ai oublié qu'il y avait plus simple en récupérant les ID des GUICtrlCreateListViewItem()
#include <GUIConstantsEx.au3>#include <MsgBoxConstants.au3>#include <WindowsConstants.au3>Example
()Func Example
() GUICreate("Mon Gui", 440, 250, 100, 200, -1, $WS_EX_ACCEPTFILES) Global $idListview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING) Local $idItem1 = GUICtrlCreateListViewItem("item2|col22|col23", $idListview) Local $idItem2 = GUICtrlCreateListViewItem("item1|col12|col13", $idListview) Local $idItem3 = GUICtrlCreateListViewItem("item3|col32|col33", $idListview) Global $MonChamp = GUICtrlCreateInput("", 220, 10, 200,30) GUISetState(@SW_SHOW) ; Loop until the user exits. While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE ExitLoop Case $idListview MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2);réagit sur clic d'entête des colonnes Case $idItem1 To $idItem3 $valrow = GUICtrlRead($msg) $AAA = StringReplace($valrow,"|"," ") GUICtrlSetData($MonChamp,$AAA) EndSwitch WEndEndFunc ;==>Example
Case $idItem1 To $idItem3
est valable si tous les items sont construits à la suite
Dans ce cas, un simple clic sur la listview renvoie la valeur
Si les items sont nombreux ou si il y a des rajouts, on peut enregistrer les ID des items dans un array et récupérer les valeurs en faisant
Case $array[0] To $array[ubound($array) - 1]
Mais c'est quand même plus simple d'utiliser WM_NOTIFY
Re: Evenements GUI
Posté : lun. 14 août 2017 10:30
par danylarson
Merci pour tout !
Je vais tester