Page 1 sur 1

Couleur sélection ListView

Posté : sam. 20 févr. 2021 18:55
par papami
Bonsoir à tous.

En manipulation de ListView il est possible, comme dans l'exemple joint d'ordonner une sélection de ligne(s) par _GUICtrlListView_SetItemSelected.
A ce stade le fond de ligne est bleu.
Il le reste aussi après un clic-droit et ouverture d'un MenuContext

Code : Tout sélectionner

#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)

Global $listview

GUICreate("Test", 220, 200, -1, -1)
GUISetBkColor(0x00E0FFFF)
GUISetOnEvent(-3,"_quit")
$listview = GUICtrlCreateListView("N°|ColA|ColB", 10, 10, 200, 142,$LVS_SHOWSELALWAYS)
Local $menu = GUICtrlCreateContextMenu($listView)
Local $menuA = GUICtrlCreateMenuItem("Test", $menu)
Local $bouton = GUICtrlCreateButton("EnsureVisible ligne 5", 40, 170, 120, 20)
GUICtrlSetOnEvent($bouton,"_revoir")
For $i=1 to 20
	GUICtrlCreateListViewItem($i&"|texte A" & $i & "|valeur " & $i, $listview)
Next
_GUICtrlListView_SetItemSelected($listview, 4)
GUISetState()

While 1
	Sleep(1000)
WEnd

Func _revoir()
	_GUICtrlListView_EnsureVisible($listView,4)
	_GUICtrlListView_SetItemSelected($listview,4,False,False)
	Sleep(1000)
	_GUICtrlListView_SetItemSelected($listview,4,True,True)
EndFunc

Func _quit()
	GUIDelete()
	Exit
EndFunc

Func _menuA()
	Sleep(100)
EndFunc
Par contre l'utilisation de la fonction _GUICtrlListView_EnsureVisible provoque la disparition de cette couleur bleue pour la ou les lignes précédemment sélectionnées, même après renvoi de la commande _GUICtrlListView_SetItemSelected, et même après déselection puis resélection (comme dans cet exemple), alors qu'un clic gauche sur une ligne retrouve bien le bleu d'origine.

Le fond gris clair ne permet pas un repérage aisé dans le défilement/exploration de longues listes !

Peut-on remédier à cela et forcer la couleur d'origine à réapparaître ?

Merci pour toute info...

Re: Couleur sélection ListView

Posté : dim. 21 févr. 2021 14:05
par mikell
Ce n'est pas la faute de _GUICtrlListView_EnsureVisible (si on commente sa ligne, le problème persiste), c'est une histoire de focus (la listview perd le focus au clic sur le bouton)
Essaye ça

#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)

$gui = GUICreate("Test", 220, 200, -1, -1)
GUISetBkColor(0x00E0FFFF)
GUISetOnEvent(-3,"_quit")
$listview = GUICtrlCreateListView("N°|ColA|ColB", 10, 10, 200, 142,$LVS_SHOWSELALWAYS)
Local $menu = GUICtrlCreateContextMenu($listView)
Local $menuA = GUICtrlCreateMenuItem("Test", $menu)
Local $bouton = GUICtrlCreateButton("EnsureVisible ligne 5", 40, 170, 120, 20)
GUICtrlSetOnEvent($bouton,"_revoir")
For $i=1 to 20
   GUICtrlCreateListViewItem($i&"|texte A" & $i & "|valeur " & $i, $listview)
Next
_GUICtrlListView_SetItemSelected($listview, 4)
GUISetState()

While 1
   Sleep(10)
WEnd

Func _revoir()
   _GUICtrlListView_EnsureVisible($listview,4)
   ControlFocus($gui, "", $listview)
EndFunc

Func _quit()
   GUIDelete()
   Exit
EndFunc
 

Re: Couleur sélection ListView

Posté : dim. 21 févr. 2021 16:45
par papami
PARFAIT !

Merci chef mikell

P.S je vais remettre un mot sur mon fil précédent, au sujet de StringRegExpReplace car ma solution n'est pas idéale...