Page 1 sur 1
[R] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 11:05
par scorp84
Bonjour à tous,
J'ai une nouvelle fois besoin de votre aide.
J'ai développé pour mon boulot une GUI en Autoit dans laquelle j'ai 2 onglets et sur chacun des onglets, j'ai 1 listview.
Code : Tout sélectionner
Global $List_suivis = GUICtrlCreateListView("HEURE|ETAT|TYPE|PRESTA|SRV_CODE|CDR|SITE|PARTENAIRE|PRESCRIPTEUR|ID|HPRESTA", 24, 80, 953, 253)
Global $List_histo_resultats = GUICtrlCreateListView("HEURE|ETAT|TYPE|PRESTA|SRV_CODE|CDR|SITE|PARTENAIRE|PRESCRIPTEUR|ID", 24, 120, 460, 513)
Quand j'utilise une seule listview, je détecte sans problème un clic dessus avec la fonction trouvée ici (merci à Jérôme

:
http://www.autoitscript.fr/forum/viewto ... 425#p53425
Par contre je n'arrive pas à détecter laquelle des 2 listviews est cliquée pour exécuter la fonction désirée. Un équivalent de ceci :
Code : Tout sélectionner
GUIRegisterMsg($WM_NOTIFY, "f_ClicListviewSuivi"); Si clic sur $List_suivis
GUIRegisterMsg($WM_NOTIFY, "f_ClicListviewHisto") ; Si clic sur $List_histo_resultats
Merci d'avance pour votre aide.
Amicalement.
BM
Re: [..] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 11:23
par TommyDDR
Malheureusement vous ne pouvez faire qu'un GUIRegisterMsg par Code ($WM_NOTIFY)
Soit vous n'en faite qu'un et dans la fonction vous déterminé sur lequel vous avez cliqué.
Soit vous utilisez l'UDF que j'ai fait :
http://autoitscript.fr/forum/viewtopic. ... 098#p44098
Re: [..] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 11:47
par scorp84
Bonjour,
Merci pour votre réponse super rapide
J'ai regardé votre code mais je n'ai pas compris (désolé

comment je pouvais récupérer l'ID de la listview qui a déclenché le GUIRegisterMsg ?
Merci d'avance.
Amicalement.
BM
Re: [..] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 11:50
par TommyDDR
Envoyez votre code complet.
Re: [..] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 14:53
par scorp84
Re-bonjour,
J'ai trouvé une solution
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=R:\Scripts\Autoit - Aqui\Suivi prestas\Test.kxf
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124)
Global $List1 = GUICtrlCreateListView("COL1|COL2", 16, 24, 265, 318, BitOR($LVS_EDITLABELS, $LVS_REPORT))
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $List1 = ' & $List1 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
_GUICtrlListView_SetExtendedListViewStyle(-1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER ))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 80)
Global $List2 = GUICtrlCreateListView("COL3|Col4", 304, 24, 249, 318, BitOR($LVS_EDITLABELS, $LVS_REPORT))
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $List2 = ' & $List2 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
_GUICtrlListView_SetExtendedListViewStyle(-1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER ))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 80)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tagNMHDR, $event, $code, $bID
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
$code = DllStructGetData($tagNMHDR, 3)
$bID = BitAND($wParam, 0xFFFF)
If $bID = 3 And $code = -2 Then MsgBox(0, "", "Clic List 1")
If $bID = 4 And $code = -2 Then MsgBox(0, "", "Clic List 2")
Return $GUI_RUNDEFMSG
EndFunc
Mais elle nécessite parfois plusieurs clics sur la liste pour fonctionner.
Quelqu'un aurait il une solution plus fiable ?
Merci d'avance.
Amicalement.
BM
Re: [..] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 15:03
par scorp84
Bonjour,
J'ai trouvé la solution sur le forum anglais :
http://www.autoitscript.com/forum/topic ... ntry963362
La différence était au niveau du
Merci à TommyDDR pour son aide.
Amicalement.
BM
Re: [R] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 16:21
par TommyDDR
En utilisant mon dernier UDF vous pouvez y arriver encore plus facilement :
► Afficher le texteExemple
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include "_GUIXViewEx.au3"
#Region ### START Koda GUI section ### Form=R:\Scripts\Autoit - Aqui\Suivi prestas\Test.kxf
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124)
Global $List1 = GUICtrlCreateListView("COL1|COL2", 16, 24, 265, 318, BitOR($LVS_EDITLABELS, $LVS_REPORT))
Global $List2 = GUICtrlCreateListView("COL3|Col4", 304, 24, 249, 318, BitOR($LVS_EDITLABELS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($List1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER ))
_GUICtrlListView_SetExtendedListViewStyle($List2, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER ))
_GUICtrlListView_SetColumnWidth($List1, 0, 150)
_GUICtrlListView_SetColumnWidth($List1, 1, 80)
_GUICtrlListView_SetColumnWidth($List2, 0, 150)
_GUICtrlListView_SetColumnWidth($List2, 1, 80)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GUICtrlXView_SetOnEvent($List1, "ClicListe1", $NM_CLICK)
_GUICtrlXView_SetOnEvent($List2, "ClicListe2", $NM_CLICK)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func ClicListe1($hWnd, $code)
MsgBox(0, "", "Liste1")
EndFunc
Func ClicListe2($hWnd, $code)
MsgBox(0, "", "Liste2")
EndFunc
UDF :
http://autoitscript.fr/forum/viewtopic. ... 541#p73541
Re: [R] Détection clic sur 2ème listview
Posté : mer. 07 nov. 2012 16:25
par scorp84
Trop fort (comme d'hab
Merci ++++++++++
Amicalement.
BM