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.
[..] action souris dans une GUICtrlCreateListView.
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 1
- Messages : 11
- Enregistré le : lun. 16 mars 2009 16:52
- Status : Hors ligne
-
- Niveau 7
- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] action souris dans une GUICtrlCreateListView.
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
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
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] action souris dans une GUICtrlCreateListView.
On peut aussi passer par le mode événement classique.
Voir l'outil RDG.exe dont les sources sont disponible ici.
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é".
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é".
-
- Niveau 1
- Messages : 11
- Enregistré le : lun. 16 mars 2009 16:52
- Status : Hors ligne
Re: [..] action souris dans une GUICtrlCreateListView.
J'avance vite grâce à vous ... Tlem, je regarde ton outil et je te tiens au courant. GaRydelaMer pour ce petit cours, MERCI.
-
- Niveau 1
- Messages : 11
- Enregistré le : lun. 16 mars 2009 16:52
- Status : Hors ligne
Re: [..] action souris dans une GUICtrlCreateListView.
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.
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.
-
- Niveau 7
- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] action souris dans une GUICtrlCreateListView.
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
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