Evenements GUI

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
danylarson
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Evenements GUI

#1

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Evenements GUI

#2

Message 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 !
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Evenements GUI

#3

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
danylarson
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Re: Evenements GUI

#4

Message 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
    WEnd
EndFunc   ;==>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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Evenements GUI

#5

Message 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
    WEnd
EndFunc   ;==>Example
Func 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.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Evenements GUI

#6

Message par mikell »

Pour le code WM_NOTIFY j'ai besoin d'eviter de m en servir
Pourquoi diable ?? :shock:

@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
    WEnd
EndFunc   ;==>Example

Func listviewread()
        $AAA = StringReplace(GUICtrlRead(GUICtrlRead($idListview)),"|"," ")
        GUICtrlSetData($MonChamp,$AAA)
EndFunc
" 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
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Evenements GUI

#7

Message 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
    WEnd
EndFunc   ;==>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 :P
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
danylarson
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Re: Evenements GUI

#8

Message par danylarson »

Merci pour tout !

Je vais tester :)
Répondre