ListView ;Ajouter un icone sur des lignes spécifiques

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

ListView ;Ajouter un icone sur des lignes spécifiques

#1

Message 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
Fichiers joints
Capture.JPG
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1973
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#2

Message 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)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#3

Message 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
Répondre