[..] Modifier la couleur d'un item dans 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.
[..] Modifier la couleur d'un item dans une listview
Bonjour,
Existe-t-il un moyen de modifier la couleur d'un item d'une listview lorsque celle-ci est déjà remplie ?
En effectuant des recherches sur le forum, j'ai trouvé des exemples de code pour modifier la couleur du texte d'un item au moment où il est inséré dans la liste, mais après coup je ne trouve pas.
Faut-il retirer l'item et le remettre en modifiant sa couleur ?
(a priori ça me semble un peu lourd comme méthode)
Voici le contexte :
Les items de la listview sont des adresses IP de stations.
Le script effectue des opérations sur chaque station sélectionnée dans la liste.
Quand l'opération se termine sur une station, je souhaite changer la couleur de l'item selon le résultat de l'action. Exemple texte rouge si erreur, texte vert si OK.
Voila, merci d'avance...
Val
Existe-t-il un moyen de modifier la couleur d'un item d'une listview lorsque celle-ci est déjà remplie ?
En effectuant des recherches sur le forum, j'ai trouvé des exemples de code pour modifier la couleur du texte d'un item au moment où il est inséré dans la liste, mais après coup je ne trouve pas.
Faut-il retirer l'item et le remettre en modifiant sa couleur ?
(a priori ça me semble un peu lourd comme méthode)
Voici le contexte :
Les items de la listview sont des adresses IP de stations.
Le script effectue des opérations sur chaque station sélectionnée dans la liste.
Quand l'opération se termine sur une station, je souhaite changer la couleur de l'item selon le résultat de l'action. Exemple texte rouge si erreur, texte vert si OK.
Voila, merci d'avance...
Val
Modifié en dernier par Tlem le mar. 14 avr. 2009 20:41, modifié 1 fois.
Raison : Ajout balise de titre
Raison : Ajout balise de titre
-
- Niveau 7
- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: Modifier la couleur d'un item dans une listview déjà remplie
Bonjour
je sais pas si c'est possible.
Une autre idée qui est surement plus simple. Tu change l'image de l'item.
Tu créer autant d'icônes que tu veux, pour chaque état.
1 en attente
2 ok
3 erreur
Une autre idée, tu utilises les groupes
1 groupe Fais sans erreur
1 groupe Fais avec erreur
Bien sur tu peux faire les 2, Icônes plus groupes.
_GUICtrlListView_SetItemImage() pour changer l'image
_GUICtrlListView_EnableGroupView() pour activer la vue par groupe
_GUICtrlListView_InsertGroup() pour créer les groupes dans la LV
_GUICtrlListView_SetItemGroupID() pour affecter un item dans un groupe
je sais pas si c'est possible.
Une autre idée qui est surement plus simple. Tu change l'image de l'item.
Tu créer autant d'icônes que tu veux, pour chaque état.
1 en attente
2 ok
3 erreur
Une autre idée, tu utilises les groupes
1 groupe Fais sans erreur
1 groupe Fais avec erreur
Bien sur tu peux faire les 2, Icônes plus groupes.
_GUICtrlListView_SetItemImage() pour changer l'image
_GUICtrlListView_EnableGroupView() pour activer la vue par groupe
_GUICtrlListView_InsertGroup() pour créer les groupes dans la LV
_GUICtrlListView_SetItemGroupID() pour affecter un item dans un groupe
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Pour changer la couleur de fond j'utilise (ça marche aussi quand c'est déjà rempli) :
mais j'ai vu qu'il y a d'autres fonctions dans le même genre dans les _GUICtrlListView_...
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$a_listViewItems[$i] = GUICtrlCreateListViewItem(..., $idListView)
GUICtrlSetBkColor($a_listViewItems[$i], $GUI_BKCOLOR_TRANSPARENT) ; fond transparent
GUICtrlSetBkColor($a_listViewItems[$i], 0xff0000) ; fond rouge
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: [..] Modifier la couleur d'un item dans une listview
Merci à tous ceux qui m'ont répondu.
Je suis revenu à d'autre tâches, mais je garde vos propositions sous le coude.
J'ajouterai des commentaires dès que possible pour clôturer le fil.
A bientôt
Je suis revenu à d'autre tâches, mais je garde vos propositions sous le coude.
J'ajouterai des commentaires dès que possible pour clôturer le fil.
A bientôt
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Bonjour,
Désolé de déterrer ce sujet mais j'ai exactement le même soucis.
Je suis allé du côté de WM_NOTIFY et $NM_CUSTOMDRAW mais impossible de modifier la couleur d'un item de la listview en cliquant dessus par exemple.
Est-ce qu'une solution a été trouvé depuis la création de ce sujet ?
Désolé de déterrer ce sujet mais j'ai exactement le même soucis.
Je suis allé du côté de WM_NOTIFY et $NM_CUSTOMDRAW mais impossible de modifier la couleur d'un item de la listview en cliquant dessus par exemple.
Est-ce qu'une solution a été trouvé depuis la création de ce sujet ?
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
WM_NOTIFY est la bonne piste, voilà un exemple avec dble-clic (adaptable)
► Afficher le texte
" 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 )
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Merci beaucoup pour cet exemple.
Malheureusement j'utilise _GUICtrlListView_AddItem et _GUICtrlListView_AddSubItem pour compléter ou mettre à jour la listview et je vois dans votre code que vous récupérez les controlID des items en retour de GUICtrlCreateListViewItem. Ce qui vous permet ensuite de colorer le texte avec GuiCtrlSetColor.
Y a-t-il un moyen pour récupérer les controlID de mes items ?
Edit : Au départ, faute de pouvoir utiliser GuiCtrlSetColor, j'étais parti sur la structure $tagNMCUSTOMDRAW qui permet de modifier les couleurs des items ("clrText" et "clrTextBk") mais je n'ai pas réussi à gérer les messages issus de NM_CUSTOMDRAW.
Malheureusement j'utilise _GUICtrlListView_AddItem et _GUICtrlListView_AddSubItem pour compléter ou mettre à jour la listview et je vois dans votre code que vous récupérez les controlID des items en retour de GUICtrlCreateListViewItem. Ce qui vous permet ensuite de colorer le texte avec GuiCtrlSetColor.
Y a-t-il un moyen pour récupérer les controlID de mes items ?
Edit : Au départ, faute de pouvoir utiliser GuiCtrlSetColor, j'étais parti sur la structure $tagNMCUSTOMDRAW qui permet de modifier les couleurs des items ("clrText" et "clrTextBk") mais je n'ai pas réussi à gérer les messages issus de NM_CUSTOMDRAW.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Nontatane a écrit :Y a-t-il un moyen pour récupérer les controlID de mes items ?
Mais une gestion de listview peut très bien être faite par GUICtrlCreateListViewItem + GuiCtrlSetData, est-il vraiment nécessaire d'utiliser _GUICtrlListView_AddItem & Co qui ne sont pas du tout pratiques ?
" 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 )
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Et bien cela dépend si l'on peut ajouter des icônes/images où l'on souhaite avec la fonction Listview native.
De ce que j'ai pu lire, on peut en ajouter en première colonne via GuiCtrlSetimage mais pas ailleurs ?
De ce que j'ai pu lire, on peut en ajouter en première colonne via GuiCtrlSetimage mais pas ailleurs ?
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Ah mais nonAMHA l'important c'est qu'avec GUICtrlCreateListViewItem tu identifies les items (ID, handle, index) alors qu'avec l'autre machin tu n'as que leurs index ... ce qui te fait une belle jambe si la listview doit évoluer ^^
Après si tu veux gérer la couleur de texte par subitem là en revanche tu peux pas échapper aux joies de NM_CUSTOMDRAW (même si avoir les ids des items peut faciliter la tâche)
► Afficher le texte
Après si tu veux gérer la couleur de texte par subitem là en revanche tu peux pas échapper aux joies de NM_CUSTOMDRAW (même si avoir les ids des items peut faciliter la tâche)
" 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 )
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Je suis d'accord avec vous, ne récupérer que l'index des items est assez pénible.
En fait je pensais que pour ajouter un subitem par la fonction UDF il fallait au préalable avoir créer l'item avec _GUICtrlListView_AddItem. Des fois je me mettrais des claques...
Voici le bout de code permettant de modifier la couleur de l'item souhaité. Par contre je ne sais pas comment modifier la couleur d'un subitem sans modifier toute la ligne :
En fait je pensais que pour ajouter un subitem par la fonction UDF il fallait au préalable avoir créer l'item avec _GUICtrlListView_AddItem. Des fois je me mettrais des claques...
Voici le bout de code permettant de modifier la couleur de l'item souhaité. Par contre je ne sais pas comment modifier la couleur d'un subitem sans modifier toute la ligne :
Code : Tout sélectionner
Case $hWndListViewPC
Switch $iCode
Case $NM_CUSTOMDRAW ; afin de changer la couleur ou la police du texte des items de la listview
If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
Local $iDrawStage, $tCustDraw
$tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $ilParam)
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
$iIndex = DllStructGetData($tCustDraw, 'dwItemSpec')
If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW
If $iDrawStage = $CDDS_ITEMPREPAINT Then
If $tab_stock_couleur[$iIndex] <> "" Then ; tableau stockant des couleurs prédéfinies
DllStructSetData($tCustDraw, 'clrText', RGB2BGR($tab_stock_couleur[$iIndex]))
EndIf
Return $CDRF_NOTIFYSUBITEMDRAW
EndIf
EndSwitch
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Bon j'ai quelque chose là
On check l'item et le subitem avec le NM_CLICK avant de l'exploiter dans le NM_CUSTOMDRAW
Par facilité parce que j'avais déjà un bout de script ici j'utilise _GUICtrlListView_CreateEdit
... mais ça marche aussi avec GuiCtrlCreateListview
On check l'item et le subitem avec le NM_CLICK avant de l'exploiter dans le NM_CUSTOMDRAW
Par facilité parce que j'avais déjà un bout de script ici j'utilise _GUICtrlListView_Create
► Afficher le texte
... mais ça marche aussi avec GuiCtrlCreateListview
► Afficher le texte
" 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 )
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
En un mot : Génial
Par contre je ne comprends pas comment seul le subitem peut changer de couleur ?
La fonction utilisée est toujours la même "DllStructSetData($tCustDraw, "clrText", $iColor)" et on ne précise pas spécialement l'index du subitem ?
Pourquoi ne repaint-il pas toute la ligne ?
De plus vous utilisez $CDRF_NEWFONT comme retour de message, est-ce une obligation ?
Désolé de vous embêter encore mais pouvez-vous m'expliquer en détails le fonctionnement de ce fichu $NM_CUSTOMDRAW ?
Merci par avance.
Par contre je ne comprends pas comment seul le subitem peut changer de couleur ?
La fonction utilisée est toujours la même "DllStructSetData($tCustDraw, "clrText", $iColor)" et on ne précise pas spécialement l'index du subitem ?
Pourquoi ne repaint-il pas toute la ligne ?
De plus vous utilisez $CDRF_NEWFONT comme retour de message, est-ce une obligation ?
Désolé de vous embêter encore mais pouvez-vous m'expliquer en détails le fonctionnement de ce fichu $NM_CUSTOMDRAW ?
Merci par avance.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
En fait dans NM_CUSTOMDRAW les notifications sont retournées par étapes, c'est le fait d'avoir retourné CDRF_NOTIFYSUBITEMDRAW à l'étape précédente qui autorise l'action sur les subitems
Et c'est à l'étape suivante qu'on précise l'index du subitem à modifier (le $click_subitem récupéré au NM_CLICK), tu peux le vérifier en modifiant juste cette ligneoù là effectivement toute la ligne est repeinte, mais d'une couleur différente selon le subitem cliqué
Quand on a assimilé le concept de fonctionnement, les possibilités deviennent variées
Par exemple pour que l'item garde sa nouvelle couleur il suffit de commenter cette ligne dans le NM_CLICKJe renvoie CDRF_NEWFONT pour notifier les modifications mais CDRF_NOTIFYSUBITEMDRAW marche aussi
Pour le fonctionnement en détail voir ici :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
(surtout en bas de la page) où pour une fois MS explique les choses clairement
Et c'est à l'étape suivante qu'on précise l'index du subitem à modifier (le $click_subitem récupéré au NM_CLICK), tu peux le vérifier en modifiant juste cette ligne
Code : Tout sélectionner
If $iItem = $click_item Then [color=#dd0000];;; and $iSubItem = $click_subitem Then[/color]
Quand on a assimilé le concept de fonctionnement, les possibilités deviennent variées
Par exemple pour que l'item garde sa nouvelle couleur il suffit de commenter cette ligne dans le NM_CLICK
Code : Tout sélectionner
; If $click_item<>-1 Then _GUICtrlListView_SetTextColor($listview, 0)
Pour le fonctionnement en détail voir ici :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
(surtout en bas de la page) où pour une fois MS explique les choses clairement
" 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 )
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Merci beaucoup pour toutes ces précisions.
En effet msdn est assez velu et souvent manque de liens d'explications...
En tout cas grâce à vous je vais pouvoir désormais m'amuser avec Custom Draw.
En effet msdn est assez velu et souvent manque de liens d'explications...
En tout cas grâce à vous je vais pouvoir désormais m'amuser avec Custom Draw.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Oui, par exemple : dans la mesure où on colore les (sub)items sélectionnés, on peut alors avoir envie de se débarrasser de la pollution visuelle que représente le 'highlight' au clic
► Afficher le texte
" 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 )
-
- Niveau 4
- Messages : 63
- Enregistré le : mar. 30 juin 2009 20:47
- Localisation : Angoulême
- Status : Hors ligne
Re: [..] Modifier la couleur d'un item dans une listview
Tiens d'ailleurs en parlant de sélection, est-il possible de changer la couleur du highlight de cette façon ?
Il me semble avoir lu que cela dépendait du thème de Windows et que le seul moyen était de repeindre par dessus via les fonctions _GDIPlus (texte et fond) ?
Il me semble avoir lu que cela dépendait du thème de Windows et que le seul moyen était de repeindre par dessus via les fonctions _GDIPlus (texte et fond) ?