[..] Modifier la couleur d'une ligne dans une ListView

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
jpascal
Niveau 5
Niveau 5
Messages : 140
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[..] Modifier la couleur d'une ligne dans une ListView

#1

Message par jpascal »

Bonjour,

Ce type de question a été posée de nombreuses fois et des réponses ont été apportées.
Je n'arrive malheureusement pas à résoudre mon problème.

Si l'on désire changer la couleur d'une ligne, il suffit d'utiliser GUICtrlCreateListViewItem() puis GUICtrlSetColor().

Or j'utilise _GUICtrlListView_AddItem() car j'ai besoin de _GUICtrlListView_SetItemGroupID().

Dans ce cas je peux utiliser une fonction WM_NOTIFY() avec $NM_CUSTOMDRAW.

Mais DllStructSetData($tCustDraw, "clrText", $CLR_XXXX) ne change que la couleur de l'item ou du sous-item.

Je suis donc bloqué.

Merci d'avance pour votre aide.

Voici le code de la fonction WM_NOTIFY()
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_CUSTOMDRAW
               Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
               Local $iDrawStage = DllStructGetData($tCustDraw, "dwDrawStage")
               Local $iSubItem = DllStructGetData($tCustDraw, "iSubItem")
               Local $iItem = DllStructGetData($tCustDraw, "dwItemSpec")
               If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW
               If $iDrawStage = $CDDS_ITEMPREPAINT Then
                  ControlListView($hGUI, "", $idListview, "DeSelect", $iItem)
                  _GUICtrlListView_SetItemFocused($hListView, $iItem, False)
                  Return $CDRF_NOTIFYSUBITEMDRAW
               EndIf

               ; Changement de couleur
               Local $sType = _GUICtrlListView_GetItemText($hListView, $iItem)
               Local $sValue = _GUICtrlListView_GetItemText($hListView, $iItem, $iSubItem)
               If StringRegExp($sType, 'Canard|Poulet', $STR_REGEXPMATCH) Then
                  DllStructSetData($tCustDraw, "clrText", $CLR_OLIVE)
               ElseIf StringRegExp($sValue, 'Toto|Titi', $STR_REGEXPMATCH) Then
                  DllStructSetData($tCustDraw, "clrText", $CLR_RED) ; JE VOUDRAIS COLORISER TOUTE LA LIGNE
               EndIf

               Return $CDRF_NEWFONT
         EndSwitch
   EndSwitch
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
AutoIt 3.3.15.1 / 3.3.15.3 - SciTE 4.2.0 - Windows 10 x64
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2486
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Modifier la couleur d'une ligne dans une ListView

#2

Message par jguinch »

Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre