[..] action souris dans une GUICtrlCreateListView.

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
bouba91300
Niveau 1
Niveau 1
Messages : 11
Enregistré le : lun. 16 mars 2009 16:52
Status : Hors ligne

[..] action souris dans une GUICtrlCreateListView.

#1

Message par bouba91300 »

Bonjour,

Comme d'habitude j'ai pas mal de problèmes avec les GUI et les interactions clavier/souris sous Autoit. alors la question du jour, c'est quelles sont les lignes de codes pour que lorsque je double-click sur une idem avec la souris directement dans une GUICtrlCreateListView (qui contient un tableau 2D) avoir comme retour l'index du tableau ou la valeur qu'il contient.

Merci.
Laurent.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] action souris dans une GUICtrlCreateListView.

#2

Message par GaRydelaMer »

Bonjour

Alors pour récuppérer la action de la souris cela se passe en plusieurs étape.

D'abord il faut dire a ton programme de capturer les évenements, et lui indiqué qu'elle fonction va les traiter.

Un peu comme on fait dans le while et $nMsg = GUIGetMsg() sauf que c'est pas sufisant pour les objets un peu plus complexe comme les listeView ou Treeview.

Donc on fait comme ca:
Aprés la création de la GUI on va lui dire de capturer les évenement xindoxs et de les envoyer a une fonction.
GUIRegisterMsg($WM_NOTIFY, "_MY_WM_NOTIFY")

Donc on va créer la fonction _MY_WM_NOTIFY() qui va prendre les évenements windows. Maintenant la question qui a envoyer un évènement et quel est-il ??

C'est pour ca que l'on va ajouter 2 ou 4 paramêtre a cette fonction.
Func _MY_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
EndFunc

Comme tu le vois, on va recevoir le Handler et un Message de windows.

Voila un exemple de fonction

Code : Tout sélectionner

Func _MY_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam, $lParam
    Local $tNMHDR, $_hWnd, $_iCtrl, $_iCode
    Local $hGUI = _GUIPng_GetGui($GUI_Main)
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $_hWnd = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $_iCtrl = DllStructGetData($tNMHDR, "IDFrom")
    $_iCode = DllStructGetData($tNMHDR, "Code")
    #forceref $_iCtrl, $hGUI

    Switch $_hWnd
        Case $MA_LISTVIEW
                        ;;; ici on récupère les infos de la listview
            Local $tNMLSTV = DllStructCreate($tagNMLISTVIEW, $lParam)
            Local $_Item = DllStructGetData($tNMLSTV, "Item")
            Local $_Param = _GUICtrlListView_GetItemParam($_hWnd, $_Item)
            Switch $_iCode
                Case $LVN_BEGINDRAG, $LVN_BEGINRDRAG ;;; Drag and Drop
                    Return 1
                Case $LVN_HOTTRACK  ;;; Passage de la souris
                        Switch $_Item
                            Case - 1
                                         ;; passage de la souris sur la listview
                            Case Else
                                 ;; passage de la souris sur 1 Item la listview
                        EndSwitch
                    EndIf
                    Return 0
                Case $NM_CLICK ;;; Click de la souris
                    ConsoleWrite("++ _MY_WM_NOTIFY() $hListView $NM_CLICK " & $_Item & @LF)
                    ConsoleWrite("++ _MY_WM_NOTIFY() $hListView $NM_CLICK " & $_Param & @LF)
                    If $_Item > -1 Then
                        ConsoleWrite("++ _MY_WM_NOTIFY() LV_Videos $NM_CLICK Item " & $_Item & @LF)
                    EndIf
                Case $NM_RCLICK ;;; click bouton droit
                Case $NM_DBLCLK, $NM_RDBLCLK ;; Idem mais double click
                Case $NM_KILLFOCUS ; The control has lost the input focus
                Case $NM_SETFOCUS ; The control has received the input focus
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG ;;; la fonction renvoie les évènements par défaut de AutoIt a la suite de ton programme
EndFunc   ;==>_MY_WM_NOTIFY
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] action souris dans une GUICtrlCreateListView.

#3

Message par Tlem »

On peut aussi passer par le mode événement classique.
Voir l'outil RDG.exe dont les sources sont disponible ici.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
bouba91300
Niveau 1
Niveau 1
Messages : 11
Enregistré le : lun. 16 mars 2009 16:52
Status : Hors ligne

Re: [..] action souris dans une GUICtrlCreateListView.

#4

Message par bouba91300 »

J'avance vite grâce à vous ... Tlem, je regarde ton outil et je te tiens au courant. GaRydelaMer pour ce petit cours, MERCI.
bouba91300
Niveau 1
Niveau 1
Messages : 11
Enregistré le : lun. 16 mars 2009 16:52
Status : Hors ligne

Re: [..] action souris dans une GUICtrlCreateListView.

#5

Message par bouba91300 »

Hello GaRydelaMer,

Je pense avoir compris ton explication (en gros), mais j'ai un petit soucis avec cette ligne "Local $hGUI = _GUIPng_GetGui($GUI_Main)" , autoit ne reconnait pas la fonction "_GUIPng_GetGui". Cette fonction a t-elle besoin d'un incluse ?

Merci.
Laurent.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] action souris dans une GUICtrlCreateListView.

#6

Message par GaRydelaMer »

Bonjour

Oupss!! en effet ca c'est une fonction qui est dans ma grosse UDF (pas encore mise en ligne) de création de GUI avec des images PNG.

En fait tu peux t'en passer, ma fonction renvoie simplement le Handler de la Fenêtre $GUI_Main.

Dons ton cas c'est le handler de ta listView: GUICtrlGetHandle($ControlID) si tu en as besoin.

Voila
Répondre