[R] Détection clic sur listview et change sur input

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

[R] Détection clic sur listview et change sur input

#1

Message par scorp84 »

Bonjour,

J'ai un problème : Je dois détecter un clic sur un listview et un change sur un input.

J'utilise les fonction suivantes :

Code : Tout sélectionner

_GUICtrlXView_SetOnEvent($ListView_en_cours, "f_ClicSurListView", $NM_CLICK)
Et

Code : Tout sélectionner

GUIRegisterMsg($WM_COMMAND, "My_WM_COMMAND")
Pour la seconde fonction, j'ai essayé ce code :

Code : Tout sélectionner

	$objet_avec_focus=ControlGetFocus($Form1,"")
	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $objet_avec_focus = ' & $objet_avec_focus & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console


	Local $setHK = False
    $nNotifyCode = BitShift($iwParam, 16)
	;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $nNotifyCode = ' & $nNotifyCode & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $nID = BitAND($iwParam, 0x0000FFFF)
	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $nID = ' & $nID & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $hCtrl = $ilParam
	;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hCtrl = ' & $hCtrl & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
	;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : GUICtrlGetHandle($ListView_en_cours) = ' & GUICtrlGetHandle($ListView_en_cours) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
	;If GUICtrlGetHandle($Input_srv_code) Then Return 0

	; Changement combo $Combo_nb_agents
	If $nNotifyCode=1 And $hCtrl=GUICtrlGetHandle($Combo_nb_agents) And GUICtrlRead($Combo_nb_agents)<>"" Then
		f_verif_changement_infos()
	EndIf

	; Changement combo $Combo_nb_agents
	If $nNotifyCode=1 And $hCtrl=GUICtrlGetHandle($Combo_moyen) And GUICtrlRead($Combo_moyen)<>"" Then
		f_verif_changement_infos()
	EndIf

	; Changement input $Input_demande_de
	If $nNotifyCode=768 And $hCtrl=GUICtrlGetHandle($Input_demande_de) Then
		f_verif_changement_infos()
	EndIf

	; Changement edit $Edit_observations
	If $nNotifyCode=768 And $hCtrl=GUICtrlGetHandle($Edit_observations) Then
		f_verif_changement_infos()
	EndIf

	; Clic sur $ListView_en_cours
	If $nNotifyCode=768 And $objet_avec_focus="SysListView321" Then
		f_ClicSurListView()
		Return 0
	EndIf

    Return $GUI_RUNDEFMSG
Mais j'ai l'impression que mes 2 fonctions se bloquent l'une et l'autre.

Sur le change, cela fonctionne très bien mais il ne détecte pas le clic sur la listview.

J'ai essayé de désactiver la première fonction mais pas mieux :-(

Dois-je séparer les 2 fonctions ?

Quelqu'un aurait-il une idée ?

Merci ++ d'avance.

Cordialement.

BM
Modifié en dernier par scorp84 le mar. 26 févr. 2019 13:46, modifié 1 fois.
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: [..] Détection clic sur listview et change sur input  

#2

Message par walkson »

Bonjour,
Ce code ne ferait pas l'affaire ?
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $read
Global $Form1 = GUICreate("Form1", 522, 268, 691, 192)
Global $ListView1 = GUICtrlCreateListView("|||", 16, 16, 153, 161)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
Global $ListView1_0 = GUICtrlCreateListViewItem("aa|zz|ww", $ListView1)
Global $ListView1_1 = GUICtrlCreateListViewItem("bb|qq|dd", $ListView1)
Global $ListView1_2 = GUICtrlCreateListViewItem("FF|VV|GG", $ListView1)
Global $Input1 = GUICtrlCreateInput("", 200, 100, 209, 30)
Global $Input2 = GUICtrlCreateInput("", 200, 140, 209, 30, $ES_READONLY)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd
Func Change()
   GUICtrlSetBkColor($Input2, 0xEEAA00)
   GUICtrlSetData($input2, $read & " change: " & GUICtrlRead($Input1))
   Sleep(3000)
   GUICtrlSetData($input2, "")
   GUICtrlSetBkColor($Input2, 0xFFFFFF)
   $read = GUICtrlRead($Input1)
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iCode = DllStructGetData($tNMHDR, "Code")
   $List1 = GUICtrlGetHandle($ListView1)

    Switch $hWndFrom
        Case $List1
            Switch $iCode
                Case $NM_CLICK
                    $aLV_Click_Info = _GUICtrlListView_SubItemHitTest($List1)
                    $iIndex = $aLV_Click_Info [0]
               $iSubItem  = $aLV_Click_Info [1]
               GUICtrlSetData($Input1,_GUICtrlListView_GetItemText ( $List1, $iIndex , $iSubItem ))
         EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $hWndFrom, $iIDFrom, $iCode, $hInput1
        $hInput1 = GUICtrlGetHandle($input1)
        $hWndFrom = $lParam
        $iIDFrom = _WinAPI_LoWord($wParam)
        $iCode = _WinAPI_HiWord($wParam)
        Switch $hWndFrom
            Case $hInput1
                Switch $iCode
                    Case $EN_CHANGE
                         Change()
               EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_COMMAND
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [..] Détection clic sur listview et change sur input

#3

Message par scorp84 »

Bonjour Walkson,

Merci beaucoup pour votre aide.

C'est parfait :-)

Cordialement.

BM
Répondre