Bonjour,
Lorsque l'on sélecte un item dans une listview, celui-ci s'affiche sur un fond bleu.
Je souhaiterais désactiver ce comportement.
Pour une listbox, il existe le flag $LBS_NOSEL mais pas pour une listview.
L'astuce de changer le focus ne correspond pas à ma recherche car le fond devient gris.
[R] Désactiver la sélection d'une listview
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.
[R] Désactiver la sélection d'une listview
Modifié en dernier par jpascal le mar. 04 févr. 2020 09:44, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..] Désactiver la sélection d'une listview
Bonjour,
Comme ceci ?
A l'origine, ce code (récupéré sur le forum anglais) servait à colorer l'item sélectionné
Comme ceci ?
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $Array1[6], $click_item = -1, $click_subitem
$Array1[0] = "JPM"
$Array1[1] = "Holger"
$Array1[2] = "Jon"
$Array1[3] = "Larry"
$Array1[4] = "Jeremy"
$Array1[5] = "Valik"
$hGUI = GUICreate("Test", 300, 300)
Global $hListView = _GUICtrlListView_Create($hGUI, "Items|SubItems|", 10, 10, 280, 180, -1, $WS_EX_CLIENTEDGE)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
For $i = 0 To 5
_GUICtrlListView_AddItem($hListView, "Item :" & $i)
_GUICtrlListView_AddSubItem($hListView, $i , $Array1[$i], 1)
Next
GUISetState()
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 $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $NM_CLICK ; DBLCLK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$click_item = DllStructGetData($tInfo, "Index")
$click_subItem = DllStructGetData($tInfo, "SubItem")
ControlListView($hGUI, "", $hListview, "DeSelect", -1)
_GUICtrlListView_SetItemFocused($hListView, $click_item, false)
$text = _GUICtrlListView_GetItemText($hListview,$click_item,$click_subItem)
ToolTip($text,100,100)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $Array1[6], $click_item = -1, $click_subitem
$Array1[0] = "JPM"
$Array1[1] = "Holger"
$Array1[2] = "Jon"
$Array1[3] = "Larry"
$Array1[4] = "Jeremy"
$Array1[5] = "Valik"
$hGUI = GUICreate("Test", 300, 300)
Global $hListView = _GUICtrlListView_Create($hGUI, "Items|SubItems|", 10, 10, 280, 180, -1, $WS_EX_CLIENTEDGE)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
For $i = 0 To 5
_GUICtrlListView_AddItem($hListView, "Item :" & $i)
_GUICtrlListView_AddSubItem($hListView, $i , $Array1[$i], 1)
Next
GUISetState()
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 $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $NM_CLICK ; DBLCLK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$click_item = DllStructGetData($tInfo, "Index")
$click_subItem = DllStructGetData($tInfo, "SubItem")
ControlListView($hGUI, "", $hListview, "DeSelect", -1)
_GUICtrlListView_SetItemFocused($hListView, $click_item, false)
$text = _GUICtrlListView_GetItemText($hListview,$click_item,$click_subItem)
ToolTip($text,100,100)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Désactiver la sélection d'une listview
Une autre manière (forum US aussi)
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
GUICreate("", 300, 450)
Local $listView = GUICtrlCreateListView("A|B|C|D|E|F|G", 25, 25, 250, 400, -1, $LVS_EX_GRIDLINES)
For $i = 0 To 20
GUICtrlCreateListViewItem("A" & $i & "|B" & $i & "|C" & $i & "|D" & $i & "|E" & $i & "|F" & $i & "|G" & $i, $listView)
Next
$listView = GUICtrlGetHandle($listView)
GUISetState()
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_PRIMARYDOWN
$s_Item = GetItemClicked($listView)
If @error = 0 Then Msgbox(0,"", $s_Item & ": was clicked")
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func GetItemClicked( $hListView )
;get the info
$aInfo = _GUICtrlListView_SubItemHitTest( $hlistView )
If $aInfo[0] = -1 Or $aInfo[1] = -1 Then Return SetError(2, 0, -1)
If IsArray($aInfo) = 0 Then Return SetError(1, 0, -1)
;get the item/subitem text.
Return _GUICtrlListView_GetItemText($hlistView, $aInfo[0], $aInfo[1])
EndFunc
#include <GuiListView.au3>
#include <WindowsConstants.au3>
GUICreate("", 300, 450)
Local $listView = GUICtrlCreateListView("A|B|C|D|E|F|G", 25, 25, 250, 400, -1, $LVS_EX_GRIDLINES)
For $i = 0 To 20
GUICtrlCreateListViewItem("A" & $i & "|B" & $i & "|C" & $i & "|D" & $i & "|E" & $i & "|F" & $i & "|G" & $i, $listView)
Next
$listView = GUICtrlGetHandle($listView)
GUISetState()
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_PRIMARYDOWN
$s_Item = GetItemClicked($listView)
If @error = 0 Then Msgbox(0,"", $s_Item & ": was clicked")
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func GetItemClicked( $hListView )
;get the info
$aInfo = _GUICtrlListView_SubItemHitTest( $hlistView )
If $aInfo[0] = -1 Or $aInfo[1] = -1 Then Return SetError(2, 0, -1)
If IsArray($aInfo) = 0 Then Return SetError(1, 0, -1)
;get the item/subitem text.
Return _GUICtrlListView_GetItemText($hlistView, $aInfo[0], $aInfo[1])
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Désactiver la sélection d'une listview
Bonjour mikell,
Merci pour ta réponse.
Je connaissais la première solution mais la trouvant lourde, j'en espérais une autre.
Du coup j'ai testé la seconde.
Je n'ai pas compris du premier coup. Et je me suis aperçu que ça ne fonctionnait pas (les cases de la première colonne restent sélectionnées).
En fait la solution est toute simple, il suffit de créer une fausse colonne et la cacher.
Merci pour ta réponse.
Je connaissais la première solution mais la trouvant lourde, j'en espérais une autre.
Du coup j'ai testé la seconde.
Je n'ai pas compris du premier coup. Et je me suis aperçu que ça ne fonctionnait pas (les cases de la première colonne restent sélectionnées).
En fait la solution est toute simple, il suffit de créer une fausse colonne et la cacher.
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
GUICreate("", 300, 450)
Local $listView = GUICtrlCreateListView("#|A|B|C|D|E|F|G", 25, 25, 250, 400, -1, $LVS_EX_GRIDLINES) ; l'index (1ère colonne) est #
For $i = 0 To 20
; L'index (1ère colonne) est vide
GUICtrlCreateListViewItem("|A" & $i & "|B" & $i & "|C" & $i & "|D" & $i & "|E" & $i & "|F" & $i & "|G" & $i, $listView)
Next
_GUICtrlListView_SetColumnWidth($listView, 0, 0) ; On cache la première colonne
$listView = GUICtrlGetHandle($listView)
GUISetState()
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_PRIMARYDOWN
$s_Item = GetItemClicked($listView)
If @error = 0 Then Msgbox(0,"", $s_Item & ": was clicked")
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func GetItemClicked( $hListView )
;get the info
$aInfo = _GUICtrlListView_SubItemHitTest( $hlistView )
If $aInfo[0] = -1 Or $aInfo[1] = -1 Then Return SetError(2, 0, -1)
If IsArray($aInfo) = 0 Then Return SetError(1, 0, -1)
;get the item/subitem text.
Return _GUICtrlListView_GetItemText($hlistView, $aInfo[0], $aInfo[1])
EndFunc
#include <GuiListView.au3>
#include <WindowsConstants.au3>
GUICreate("", 300, 450)
Local $listView = GUICtrlCreateListView("#|A|B|C|D|E|F|G", 25, 25, 250, 400, -1, $LVS_EX_GRIDLINES) ; l'index (1ère colonne) est #
For $i = 0 To 20
; L'index (1ère colonne) est vide
GUICtrlCreateListViewItem("|A" & $i & "|B" & $i & "|C" & $i & "|D" & $i & "|E" & $i & "|F" & $i & "|G" & $i, $listView)
Next
_GUICtrlListView_SetColumnWidth($listView, 0, 0) ; On cache la première colonne
$listView = GUICtrlGetHandle($listView)
GUISetState()
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_PRIMARYDOWN
$s_Item = GetItemClicked($listView)
If @error = 0 Then Msgbox(0,"", $s_Item & ": was clicked")
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func GetItemClicked( $hListView )
;get the info
$aInfo = _GUICtrlListView_SubItemHitTest( $hlistView )
If $aInfo[0] = -1 Or $aInfo[1] = -1 Then Return SetError(2, 0, -1)
If IsArray($aInfo) = 0 Then Return SetError(1, 0, -1)
;get the item/subitem text.
Return _GUICtrlListView_GetItemText($hlistView, $aInfo[0], $aInfo[1])
EndFunc
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Re: [..] Désactiver la sélection d'une listview
En revanche, ma solution n'est pas possible si l'on désire récupérer les valeurs des cellules avec :
Case $NM_CLICK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
DllStructGetData($tInfo, 'Index')
En effet, cela nécessite de définir LVS_EX_FULLROWSELECT qui met en sélection toute la ligne.
Case $NM_CLICK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
DllStructGetData($tInfo, 'Index')
En effet, cela nécessite de définir LVS_EX_FULLROWSELECT qui met en sélection toute la ligne.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Re: [..] Désactiver la sélection d'une listview
Je viens de regarder la première solution.
En fait ce n'est pas la syntaxe à laquelle je pensais. C'est même simplissime.
La ligne ControlListView($hGUI, '', $hListView, 'DeSelect', -1) semble suffire.
A quoi sert _GUICtrlListView_SetItemFocused($hListView, $click_item, false) ?
En fait ce n'est pas la syntaxe à laquelle je pensais. C'est même simplissime.
La ligne ControlListView($hGUI, '', $hListView, 'DeSelect', -1) semble suffire.
A quoi sert _GUICtrlListView_SetItemFocused($hListView, $click_item, false) ?
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..] Désactiver la sélection d'une listview
_GUICtrlListView_SetItemFocused($hListView, $click_item, false) supprime le focus. Pour voir la différence, commentez la ligne, la cellule garde le focus (bordure en pointillée)
J'ai modifié légèrement le code de Michel qui ne sélectionne plus les cellules de la première colonne
J'ai modifié légèrement le code de Michel qui ne sélectionne plus les cellules de la première colonne
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("", 300, 450)
$label = GUICtrlCreateLabel("", 100,400, 100,25,-1,$WS_EX_CLIENTEDGE)
GUICtrlSetBkColor(-1, 0xFFFFFF)
Local $listView = GUICtrlCreateListView("A|B|C|D|E|F|G", 25, 25, 250, 350, -1, $LVS_EX_GRIDLINES)
For $i = 0 To 20
GUICtrlCreateListViewItem("A" & $i & "|B" & $i & "|C" & $i & "|D" & $i & "|E" & $i & "|F" & $i & "|G" & $i, $listView)
Next
$listView = GUICtrlGetHandle($listView)
GUISetState()
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_PRIMARYDOWN
$s_Item = GetItemClicked($listView)
If @error = 0 Then GUICtrlSetData($label, $s_Item & ": was clicked")
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func GetItemClicked( $hListView )
;get the info
$aInfo = _GUICtrlListView_SubItemHitTest( $hlistView )
If $aInfo[0] = -1 Or $aInfo[1] = -1 Then Return SetError(2, 0, -1)
If IsArray($aInfo) = 0 Then Return SetError(1, 0, -1)
ControlListView($hGUI, "", $hListview, "DeSelect", -1)
_GUICtrlListView_SetItemFocused($hListView, $aInfo[0], false)
;get the item/subitem text.
Return _GUICtrlListView_GetItemText($hlistView, $aInfo[0], $aInfo[1])
EndFunc
#include <GuiListView.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("", 300, 450)
$label = GUICtrlCreateLabel("", 100,400, 100,25,-1,$WS_EX_CLIENTEDGE)
GUICtrlSetBkColor(-1, 0xFFFFFF)
Local $listView = GUICtrlCreateListView("A|B|C|D|E|F|G", 25, 25, 250, 350, -1, $LVS_EX_GRIDLINES)
For $i = 0 To 20
GUICtrlCreateListViewItem("A" & $i & "|B" & $i & "|C" & $i & "|D" & $i & "|E" & $i & "|F" & $i & "|G" & $i, $listView)
Next
$listView = GUICtrlGetHandle($listView)
GUISetState()
Do
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_PRIMARYDOWN
$s_Item = GetItemClicked($listView)
If @error = 0 Then GUICtrlSetData($label, $s_Item & ": was clicked")
EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE
Func GetItemClicked( $hListView )
;get the info
$aInfo = _GUICtrlListView_SubItemHitTest( $hlistView )
If $aInfo[0] = -1 Or $aInfo[1] = -1 Then Return SetError(2, 0, -1)
If IsArray($aInfo) = 0 Then Return SetError(1, 0, -1)
ControlListView($hGUI, "", $hListview, "DeSelect", -1)
_GUICtrlListView_SetItemFocused($hListView, $aInfo[0], false)
;get the item/subitem text.
Return _GUICtrlListView_GetItemText($hlistView, $aInfo[0], $aInfo[1])
EndFunc
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [..] Désactiver la sélection d'une listview
Je vois en effet la différence pour le focus.
Bizarrement, dans mon code, je n'ai pas besoin de cela, les pointillés n'apparaissent pas.
J'ai testé différents paramètres pour la Listview cela ne semble pas venir de là.
L'essentiel est que j'ai désormais deux méthodes pour cacher cette sélection.
Merci à vous deux pour vos explications.
Bizarrement, dans mon code, je n'ai pas besoin de cela, les pointillés n'apparaissent pas.
J'ai testé différents paramètres pour la Listview cela ne semble pas venir de là.
L'essentiel est que j'ai désormais deux méthodes pour cacher cette sélection.
Merci à vous deux pour vos explications.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1