Modification d'un item dans un listview

abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 12 juil. 2005 à 10:30
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 12 juil. 2005 à 16:39
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

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 juil. 2005 à 14:38
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.
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
12 juil. 2005 à 14:40
Ouai ms tou ça c fé !!

Have Fun ...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 juil. 2005 à 14:49
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.
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
12 juil. 2005 à 14:54
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 ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 juil. 2005 à 15:05
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.
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
12 juil. 2005 à 15:16
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 ...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 juil. 2005 à 16:39
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.
0
Rejoignez-nous