Page 1 sur 1

ListView ;Ajouter un icone sur des lignes spécifiques

Posté : jeu. 15 avr. 2021 11:39
par yohanb767
Bonjour à tous ,

je cherche depuis un moment comment ajouter un icone dans une ListView mais que sur certaines lignes en fonction du numéros de série
hors je n'arrive à le faire que sur toutes les lignes

voici ce que donne ce me donne actuellement



si quelqu'un aurai la gentillesse de me donner une piste car je sèche
merci d'avance pour votre aide

Code : Tout sélectionner

Func _CreationListView()

	$Section = IniReadSectionNames($Data) ; Lecture des sections
	$hListView = _GUICtrlListView_Create($F_Tableau, "N° De Serie|Client/ARM|Date|Statut|Commentaire|Code Article|Designation", 10, 12, 1050,550, BitOR($LVS_EDITLABELS, $LVS_REPORT, $LVS_NOSORTHEADER))
	_GUICtrlListView_SetExtendedListViewStyle($hListView,  BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_SUBITEMIMAGES))

	 ;Load images
	 Global $ListViewImage = _GUIImageList_Create(16, 16, 5, 3)
	_GUIImageList_AddIcon($ListViewImage, @SystemDir & "\shell32.dll", 324)
	_GUICtrlListView_SetImageList($hListView, $ListViewImage, 1)

		Local $maxCheck = 1
		Local $nbCheck = 0

			If (GUICtrlRead($hListView) = $GUI_CHECKED) Then ; Si l'on coche une case.
				$nbCheck += 1  ; On incrémente le nombre de cases cochées.
					MsgBox(64, 'Info', $nbCheck)
			EndIf

    ; Taille des colonnes
	_GUICtrlListView_SetColumnWidth($hListView, 0, 150) ;(N°SERIE)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 100) ;(Client ARM)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)	;(Date)
    _GUICtrlListView_SetColumnWidth($hListView, 3, 85)	;(Statut)
	_GUICtrlListView_SetColumnWidth($hListView, 4, 1000);(Commentaire)
	_GUICtrlListView_SetColumnWidth($hListView, 5, 100);( Code Article)
	_GUICtrlListView_SetColumnWidth($hListView, 6, 150);( Code Article)


    For $i = 1 To UBound($Section) - 1 ; Boucle de lecture
        $Cle = IniReadSection($Data, $Section[$i]) ; Lecture des clés de la section en cours
			If IsArray($Cle) Then ; Si la section n'est pas vide
				_GUICtrlListView_AddItem($hListView, $Cle[1][1]) ; Récupére valeur de la clé 1 de la section en cours (N°SERIE)



				_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[2][1], 1) ; Récupére valeur de la clé 2 de la section en cours (Client ARM)
				_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[3][1], 2) ; Récupére valeur de la clé 3 de la section en cours (Date)
				_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[4][1], 3) ; Récupére valeur de la clé 4 de la section en cours (Statut)
				_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[5][1], 4) ; Récupére valeur de la clé 5 de la section en cours (Commentaire)
				;_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[5][1], 5) ; Récupére valeur de la clé 5 de la section en cours ( Code Article)
				;_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[5][1], 6) ; Récupére valeur de la clé 5 de la section en cours ( Code Article)
			EndIf
	Next


    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

EndFunc

Re: ListView ;Ajouter un icone sur des lignes spécifiques

Posté : jeu. 15 avr. 2021 17:50
par TommyDDR
Bonjour yohanb767,
Je vous conseille de poster un code qui puisse être testable, en effet, j'ai pour habitude de récupérer le code, de le tester et d'y ajouter ce qu'il manque avant de vous poster une solution en vous l'expliquant. Mais si de base il faut y ajouter du code pour pouvoir le tester, c'est plus compliqué, ou alors ça force à refaire un cas testable.

Vous n'êtes pas obligé de copier tout votre code, mais il faut que ce que vous collez ici, puisse être mis dans un fichier vierge et qu'il soit testable sans erreur.

Si vous pouvez faire ce petit effort, je me ferai un plaisir de vous aider !

Edit : vous avez de la chance, le sujet m'intriguait. j'ai fait des tests avec _GUICtrlListView_AddItem et les icones, j'en arrive à 2 solutions :
Il faut savoir que le 3ème paramètre de _GUICtrlListView_AddItem, permet d'indiquer quelle image afficher dans la 1ere colonne de votre ligne, le paramètre à renvoyer est le retour de _GUIImageList_AddIcon
1) Vous ajoutez une image transparente et utilisez le retour de _GUIImageList_AddIcon lors de _GUICtrlListView_AddItem
2) un effet de bord de _GUICtrlListView_AddItem est que lorsque vous indiquez un index d'image qui dépasse, le nombre d'images de la liste (_GUIImageList_Create), alors l'image sera invisible, vous pouvez donc indiquer un index élevé lors de votre ajout d'item _GUICtrlListView_AddItem($hListView, $Cle[1][1], 9999999)

Bien entendu, il faudra ajouter une variable : $imageIndex = _GUIImageList_AddIcon($ListViewImage, @SystemDir & "\shell32.dll", 324) et l'utiliser quand vous voudrez afficher l'image : _GUICtrlListView_AddItem($hListView, $Cle[1][1], $imageIndex)

Re: ListView ;Ajouter un icone sur des lignes spécifiques

Posté : ven. 16 avr. 2021 10:00
par yohanb767
Bonjour TommyDDR ,

Merci pour l'intérêt que tu as apporté à ma question , comme tu as pu le voir effectivement je n'ai pas envoyé la totalité du script
je fais le nécessaire pour t'envoyer la totalité sachant qu'il faudra pour qu'il fonctionne deux .ini que tu pourra déposer sur ton bureau par ex
moi je les met dans programmes(x86) avec l'ensemble du programme avec un installateur