lemick_2
Messages postés4Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention18 mai 2008
-
18 mai 2008 à 11:07
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 2014
-
18 mai 2008 à 19:49
Salut,
Je suis actuellement en train de porter une appli de CVI/Labwindows sur VS 2008, et je bloque sur la listview de mon application.
J'ai plusieurs questions :
- Est t'on obligé de passer par l'évenement "LVN_GETDISPINFO" pour afficher du texte dans la liste, ne peux t'on pas le faire plus simplement? Changer unitairement les cellules"
- Mon anglais s'est un peu rouillé est j'ai un peu de mal à comprendre le rôle précis de chacuns des membres des structures LVITEM et LVCOLUMN, quelqu'un aurai t'il un lien vers un tuto?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 18 mai 2008 à 17:04
Salut,
Pour LVN_GETDISPINFO je pense qu'on peut s'en passer. Personnellement je ne m'en sers jamais. Pour changer le texte d'une seule cellule d'une ListView je fais comme ceci:
lvitem.mask = LVIF_TEXT;
lvitem.iItem=0;//premier item
lvitem.iSubItem=2;// cellule N°2
lvitem.pszText="Bonjour";
SendMessage(hlistview,LVM_SETITEMTEXT,0,(LPARAM)&lvitem);
On peut aussi utiliser la macro ListView_SetItemText().
Pour d'autres modifications on peut utiliser le message LVM_SETITEM ou la macro ListView_SetItem().
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 18 mai 2008 à 13:21
Je pense que oui, on est obligé d'utiliser le message LVN_GETDISPINFO.
Quels sont les champs que tu ne comprends pas dans les structures LVITEM et LVCOLUMN?
lemick_2
Messages postés4Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention18 mai 2008 18 mai 2008 à 13:39
Merci pour ta réponse.
Pour les structure, j'ai un peu de mal avec les items et subitems.
Sinon au niveau de ma liste, j'arrive à afficher les icones en mode "simple" ( pas de colonnes --> LVSIL_NORMAL) mais quand j'insère les colonnes, les icones n'apparaissent pas ( vide) pourtant j'ai bien mis le LVSIL_STATE à la création de la liste.
lemick_2
Messages postés4Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention18 mai 2008 18 mai 2008 à 14:43
Merci pour ta réponse :)
J'ai trouvé la solution à mon problème :
Il faut déclarer la liste d'image avec le style "LVSIL_SMALL" (ListView_SetImageList)
Je trouve pas ca très logique mais l'important est que ca marche.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 18 mai 2008 à 17:30
Je pense que LVN_GETDISPINFO ne doit être utilisé que si le contenu de la listview est stocké quelque part par l'application. Par défaut, une listview gère elle-même son contenu.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 mai 2008 à 18:36
LVN_GETDISPINFO est effectivement très pratique pour fournir les données seulement quand les lignes sont visibles, ça permet un affichage quasi instantané au lieu d'insérer des milliers (ou plus en cas de grosse table BDD) de lignes dans la listview.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 18 mai 2008 à 19:25
Pour la vitesse il est également possible d'utiliser une ListView en OWNERDRAWFIXED. Ainsi, on ne dessine qu'une portion de lignes à la fois. La listview aura une taille fixe. Disons une trentaine d'éléments au total par exemple. Le contenu de ces éléments correspondra à une page, parmi plusieurs, d'une trentaine de lignes extraites d'une base de données ou autre. Quelques astuces de programmation et le tour est joué.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 18 mai 2008 à 19:49
En OWNERDRAWFIXED, l'application se charge de dessiner la partie visible d'une listview. Elle peut chercher quoi afficher là où on veut en dehors du vrai contenu de la listview.