Evenements GUI

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

Evenements GUI

#1

Message par danylarson » jeu. 10 août 2017 12:05

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
Membre émérite
Membre émérite
Messages : 450
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Evenements GUI

#2

Message par walkson » jeu. 10 août 2017 17:55

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5621
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Evenements GUI

#3

Message par mikell » jeu. 10 août 2017 18:44

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 1
Niveau 1
Messages : 6
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Re: Evenements GUI

#4

Message par danylarson » ven. 11 août 2017 12:23

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
Membre émérite
Membre émérite
Messages : 450
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Evenements GUI

#5

Message par walkson » dim. 13 août 2017 01:33

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5621
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Evenements GUI

#6

Message par mikell » dim. 13 août 2017 08:53

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
Membre émérite
Membre émérite
Messages : 450
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Evenements GUI

#7

Message par walkson » dim. 13 août 2017 13:13

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

danylarson
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 18 janv. 2017 12:25
Status : Hors ligne

Re: Evenements GUI

#8

Message par danylarson » lun. 14 août 2017 09:30

Merci pour tout !

Je vais tester :)

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité