Page 1 sur 1

[..] action souris dans une GUICtrlCreateListView.

Posté : ven. 17 avr. 2009 16:02
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.

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

Posté : ven. 17 avr. 2009 17:05
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
 

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

Posté : ven. 17 avr. 2009 19:57
par Tlem
On peut aussi passer par le mode événement classique.
Voir l'outil RDG.exe dont les sources sont disponible ici.

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

Posté : lun. 20 avr. 2009 11:45
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.

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

Posté : lun. 20 avr. 2009 13:46
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.

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

Posté : lun. 20 avr. 2009 14:11
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