Page 1 sur 1
[R] Colorer les lignes d'une ListView
Posté : mer. 16 janv. 2013 22:14
par Saachaa
Bonjour
J'ai pas encore trouvé ce que je cherchais...
Je cherche le moyen de d'
avoir le texte d'une ligne coloré d'une certaine façon pour chaque ligne dans ma
ListView...
Code : Tout sélectionner
If _Service_SetStartType($aSplit[1], $aSplit[2]) = 0 Then
GUICtrlCreateListViewItem("" & "|" & $nrestored & "|" & $chkbox_label_serv & "|" & $aSplit[1], $listview)
_GUICtrlListView_SetTextColor($listview, $CLR_RED)
Else
GUICtrlCreateListViewItem("" & "|" & $restored & "|" & $chkbox_label_serv & "|" & $aSplit[1], $listview)
_GUICtrlListView_SetTextColor($listview, $CLR_GREEN)
EndIf
(
Pour comprendre le fond)
Une image vaut milles mots :
J'aimerais pouvoir avoir la ligne avec "
Non restauré" en
rouge.
Il ne semble pas qu'avec
_GUICtrlListView_SetTextColor() ce soit possible, à moyen de récupérer un handle sur une ligne donné peut-être ? Je ne le sais pas en tout cas je n'ai pas réussi.
Merci à vous

Re: [..] Colorer les lignes d'une ListView
Posté : mer. 16 janv. 2013 22:29
par mikell
^^
Code : Tout sélectionner
GUICtrlCreateListViewItem("" & "|" & $nrestored & "|" & $chkbox_label_serv & "|" & $aSplit[1], $listview)
GUICtrlSetColor(-1, 0xff0000)
Re: [..] Colorer les lignes d'une ListView
Posté : jeu. 17 janv. 2013 09:16
par Saachaa
Si simple que ça... pourquoi faire compliqué quand on peut faire simple
Merci à toi

Re: [R] Colorer les lignes d'une ListView
Posté : ven. 18 janv. 2013 13:03
par Saachaa
Dis Mikell, t'as un tips ?
Code : Tout sélectionner
_GUICtrlListView_AddSubItem($listview, $r, $fixed, 1)
GUICtrlSetColor(-1, $green)
Marche pas avec un SubItem

Re: [R] Colorer les lignes d'une ListView
Posté : ven. 18 janv. 2013 14:05
par mikell
Ah mais oh, c'est pas pareil là
Ce que tu veux c'est une coloration sur les subitems et qui soit dynamique en plus
T'as que 2 solutions :
- la simple, où en créant tes items tu stockes leur ID (dans un tableau par exemple) et quand tu rajoutes un subitem tu (re)fais un GUICtrlSetColor
sur l'item
- la plus compliquée mais plus fun, ici
http://www.autoitscript.fr/forum/viewto ... 242#p72242
Re: [R] Colorer les lignes d'une ListView
Posté : ven. 18 janv. 2013 14:10
par Saachaa
D'accord... je prends la plus compliqué
J'étais déjà tombé sur ton sujet, mais là tu commences à sortir du cadre de mes connaissances !
Je vais regarder ça à tête reposé...
Re: [R] Colorer les lignes d'une ListView
Posté : mer. 23 janv. 2013 20:54
par Saachaa
Re chef !
C'est toi qui a codé ça ? Faut commencer à taquiner le Win32
Dis, chez moi la condition n'est jamais égale à 1... (iSubItem)
► Afficher le textecode
Code : Tout sélectionner
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Local $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
Local $iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $listview
Switch $iCode
Case $NM_CUSTOMDRAW
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage = DllStructGetData($tCustDraw, "dwDrawStage")
If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW
If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW
Local $iSubItem = DllStructGetData($tCustDraw, "iSubItem")
Local $iItem = DllStructGetData($tCustDraw, "dwItemSpec")
Local $iColor
If ($iSubItem == 1) Then
Local $hDC = DllStructGetData($tCustDraw, "hdc")
Local $text = _GUICtrlListView_GetItemText($listview, $iItem, 2)
If stringInStr($text, $nfixed) Or stringInStr($text, $nrestored) Then
$iColor = RGB2BGR($red)
ElseIf stringInStr($text, $fixed) Or stringInStr($text, $restored) Then
$iColor = RGB2BGR($green)
ElseIf stringInStr($text, $found) Then
$iColor = RGB2BGR($blue)
ElseIf stringInStr($text, $detected) Then
$iColor = RGB2BGR($pink)
EndIf
DllStructSetData($tCustDraw, "clrText", $iColor)
Return $CDRF_NEWFONT
Endif
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Tu peux m'en dire plus ?
Je te donnerais le code qu'il te faut

Re: [R] Colorer les lignes d'une ListView
Posté : mer. 23 janv. 2013 23:33
par mikell
Oh que non j'ai pas codé ça, j'ai fait comme on fait tous, je me suis servi dans le forum US
iSubItem est l'index du subitem dans ta listview (2ème colonne, la 1ère est d'index 0)
Re: [R] Colorer les lignes d'une ListView
Posté : jeu. 24 janv. 2013 13:33
par Saachaa
mikell a écrit :iSubItem est l'index du subitem dans ta listview (2ème colonne, la 1ère est d'index 0)
Et bien si je regarde ma capture cela correspond...
Même si j'enlève le if ça ne fonctionne pas alors ça ne doit pas être ça...
Le fait que je créé mes items avec
GUICtrlCreateListViewItem() et ma listview avec
GUICtrlCreateListView() cela change quelque chose ?
Thx
Re: [R] Colorer les lignes d'une ListView
Posté : jeu. 24 janv. 2013 14:39
par mikell
Oui
Le _GUICtrlListView_Create te retourne un handle, le GUICtrlCreateListView retourne un ID, la gestion est très différente
Pour le genre de fonctionnalité que tu veux il vaut mieux les fonctions _GUICtrlListView_*
Re: [R] Colorer les lignes d'une ListView
Posté : jeu. 24 janv. 2013 21:15
par Saachaa
D'accord
En effet ça semble aller mieux, cependant du coup :
Code : Tout sélectionner
GUICtrlCreateListViewItem("" & "|" & $found & "|" & $chkbox_label_soft & "|" & $keys_enums_name, $listview)
Et bien ne marche plus...
Du coup sais-tu laquelle des fonctions utiliser ?
Le délimiteur "|" m'était bien pratique mais avec
_GUICtrlListView_AddItem() ça ne prend pas les délimiteurs et
_GUICtrlListView_AddSubItem() m'oblige à utiliser un row...
Re: [R] Colorer les lignes d'une ListView
Posté : jeu. 24 janv. 2013 22:29
par mikell
Ben oui faut utiliser ces 2 fonctions
ça t'oblige juste à faire attention aux index mais c'est tout
Re: [R] Colorer les lignes d'une ListView
Posté : ven. 25 janv. 2013 19:28
par Saachaa
Oui du coup je vais avoir une variable global qui va s'incrémenter pour pouvoir ajouter mes items...
C'était mieux avant
Edit: Merci je vais regarder tout ça
Re: [R] Colorer les lignes d'une ListView
Posté : ven. 25 janv. 2013 21:02
par Saachaa
Code : Tout sélectionner
Func _ListViewAddItem($handle, $text)
Local $index = _GUICtrlListView_AddItem($handle, "")
Local $listsplit = StringSplit($text, "|")
;_GUICtrlListView_AddSubItem($handle, $index, $listsplit[1], 0)
_GUICtrlListView_AddSubItem($handle, $index, $listsplit[2], 1)
_GUICtrlListView_AddSubItem($handle, $index, $listsplit[3], 2)
_GUICtrlListView_AddSubItem($handle, $index, $listsplit[4], 3)
EndFunc
Paf
(je la mets ça peut servir à d'autres)
Edit : Tout fonctionne c'est énorme
Merci à toi Mikell, toujours au top !