Modification d'un item dans un listview

Signaler
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Bon voilà une question tou bête pourtant ça fé un pti moment que je galaire dessus.



En fait j'ai remplie mon listview avec des items, associé à une icone.

Je voudrai modifié cette icône, voici mon code :

lvItem.iImage = IcoWait;

SendMessage(GetDlgItem(Dlg, IDC_LIST10),LVM_SETITEM,0,(LPARAM)&lvItem);


Ms ça marche poa ^^


Have Fun ...

7 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Chaque item a sa propre icone, ils n'ont pas tous la meme.

Lorsque tu ajoutes l'item dans la listview, il faut mettre le flag LVIF_IMAGE dans le champ mask de la structure LVITEM et remplir correctement le champ iImage.
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

Ouai ms tou ça c fé !!

Have Fun ...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

relis bien mon message, si tout ce que j'ai dis tu l'a déja fait, c'est que ca marche.

ou montre moi plutot ton code pour ajouter un item.
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

Bon b voici un bou du code, j'espere que tu va comprendre :



Tu peux voir comment j'ai fé pour palier le pb, ms c du bricolage....



//Insertion des icone dans le listview

HIMAGELIST himlSmall;

HICON hIconItem;

himlSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),FALSE,2,1);

hIconItem = LoadIcon(MY_GET_INSTANCE(tWAIT->Dlg),MAKEINTRESOURCE(IDI_ICON2));

int IcoWait = ImageList_AddIcon(himlSmall,hIconItem);

DeleteObject(hIconItem);

hIconItem = LoadIcon(MY_GET_INSTANCE(tWAIT->Dlg),MAKEINTRESOURCE(IDI_ICON3));

int IcoOk = ImageList_AddIcon(himlSmall,hIconItem);

DeleteObject(hIconItem);

ListView_SetImageList(GetDlgItem(tWAIT->Dlg, IDC_LIST10), himlSmall, LVSIL_SMALL);

DeleteObject(himlSmall);



//Initialisation de l'item

LV_ITEM lvItem;

lvItem.mask
= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;

lvItem.state = 0;

lvItem.stateMask = 0;

lvItem.iItem = 0;

lvItem.lParam = 0;

lvItem.iImage = IcoOk;



//Recherche de fichier

liste = FindFirstFile(TmpDir, &File);

for (n=0;FindNextFile(liste, &File);)

if ( strcmp(File.cFileName, "..") )

{

//Remplie le listview avec les fichiers trouvés

strcpy(TmpDir,GetConfig(firstDlg(0),4));

strcat(TmpDir,"\");

strcat(TmpDir,File.cFileName);



lvItem.iSubItem = 0;

lvItem.pszText = File.cFileName;

lvItem.cchTextMax = strlen(lvItem.pszText)+1;


SendMessage(GetDlgItem(tWAIT->Dlg,
IDC_LIST10),LVM_INSERTITEM,0,(LPARAM)&lvItem);



lvItem.iSubItem = 1;

lvItem.pszText = TmpDir;

lvItem.cchTextMax = strlen(lvItem.pszText)+1;


SendMessage(GetDlgItem(tWAIT->Dlg,
IDC_LIST10),LVM_SETITEMTEXT,0,(LPARAM)&lvItem);



n++;

}

FindClose(liste);



int b;

char LocalFile[MAX_PATH];

//Parcours le listview tant que l'on trouve des items

for (b=n,n=0;SendMessage(GetDlgItem(tWAIT->Dlg, IDC_LIST10),LVM_GETITEMTEXT,n,(LPARAM)&lvItem);)

{

//Récupère les paramètre de chaque colonne

strcpy(LocalFile,TmpDir);

lvItem.iSubItem = 0;

SendMessage(GetDlgItem(tWAIT->Dlg, IDC_LIST10),LVM_GETITEMTEXT,n,(LPARAM)&lvItem);

SetDlgItemText(tWAIT->Dlg, IDC_STATIC_101,TmpDir); //Affiche l'envoie en cours

//Envoie du fichier par ftp

if ( FtpMain(tWAIT->Dlg,1,LocalFile,TmpDir,&tWAIT->waitOK) != -1 )

{//pas d'erreur

if ( tWAIT->waitOK == 1 )

{

//Enleve l'item de la list


SendMessage(GetDlgItem(tWAIT->Dlg,
IDC_LIST10),LVM_DELETEITEM,n,0);

//Supprime le fichier

DeleteFile(LocalFile);

//Décrémente le nombre de fichier

b--;

}

}

else //Sinon

{

//on modifie l'icone de l'item

lvItem.iImage = IcoWait;

SendMessage(GetDlgItem(tWAIT->Dlg, IDC_LIST10),LVM_DELETEITEM,n,0);


SendMessage(GetDlgItem(tWAIT->Dlg,
IDC_LIST10),LVM_INSERTITEM,n,(LPARAM)&lvItem);

//Affiche un message d'erreur


MessageBox(tWAIT->Dlg,"Erreur lors de l'envoie de l'archive,
veuillez ressayer ultérieurement.",TmpDir,MB_ICONERROR);

//Incrémente le nombre d'erreur

n++;

}

//Affiche le nombre de fichier restant ainsi que le nombre d'erreur

sprintf(TmpDir,"Files : %i Erreur : %i",b-n,n);

SetDlgItemText(tWAIT->Dlg, IDC_STATIC_100,TmpDir);

lvItem.iSubItem = 1;

if ( tWAIT->waitOK == -1 )

break;

}

Have Fun ...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Il ne faut pas détruire ton image list juste apres l'avoir associée a ta listview, il faut enlever le DeleteObject(himlSmall);.



Sinon le reste a l'air correct.
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

C'est pas logique puisque ça marche lorsque j'insère les items et
lorsque je fais mon pti bricolage. De plus une fois que la liste est
envoyé au listview on peut surprimer l'objet. Nah je pense que
c'est mon instruction pour modifier l'item qui n'est poa bonne.

Have Fun ...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Pour modifier l'item, je repete ce que j'ai dis plus haut:

il faut mettre le flag LVIF_IMAGE dans le champ mask de la structure LVITEM et remplir correctement le champ iImage.

Il faut evidemment remplir les champs iItem et iSubItem aussi.

Et ensuite au lieu de suprimer/ajouter l'item, tu peux envoyer un LVM_SETITEM.



Sinon pour la liste d'image, d'apres msdn il ne faut pas la suprimer.