[Api windows (win32) / C] Edition d'un subitem dans une listview

Edition d'un subitem dans une listview [Api windows (win32) / C] - C - Programmation

Marsh Posté le 07-05-2005 à 20:39:04    

Bonjour j'ai un petit souci qui m'empèche bien d'avancer,  
 
Je recupere des resultats d'une requete Mysql dans une listview, et j'aimerais pouvoir en editer tous les champs (dans plusieurs colonnes).  
 
Mon problème c'est d'arriver à éditer un subitem, pour le moment j'arrive à editer un item (première colonne), mais je me demande si c'est possible en fait, parce que je trouve vraiment aucune solution nulle part sur le net.  
 
Merci d'avance.


Message édité par Erendis le 08-05-2005 à 15:06:59
Reply

Marsh Posté le 07-05-2005 à 20:39:04   

Reply

Marsh Posté le 07-05-2005 à 20:54:18    

rah purée, j'en avais chié aussi comme un beau diable et jme rapelle pu la solution. C'etait tout con, mais la ca m'echappe ....  
 
désolé [:petrus75]

Reply

Marsh Posté le 07-05-2005 à 21:08:15    

[:rofl]

Reply

Marsh Posté le 07-05-2005 à 21:09:29    

Et t'aurais pas un morceau de code qui marche qui traine ?  
Je suis pret à me debrouiller avec n'importe quoi du moment que ça me permette de tenter de me debloquer.
 

Reply

Marsh Posté le 07-05-2005 à 21:09:42    

jme demande si c'etait pas une bete histoire de machin séparé par des \0 :gratgrat:

Reply

Marsh Posté le 07-05-2005 à 21:10:18    

Erendis a écrit :

Et t'aurais pas un morceau de code qui marche qui traine ?  


 
heuh jsais pu, jcrois pas, et en plusse chui pas chez ouam, doncques bon

Reply

Marsh Posté le 07-05-2005 à 21:14:06    

Bon donc deja de memoire on peut editer les subitem d'une listview, c'est deja une bonne nouvelle.

Reply

Marsh Posté le 07-05-2005 à 22:40:04    

c'est tout con hein, voici la procédure à suivre pour mettre un texte ("leTexte" ) à la ligne 5, colonne 3 du listview :o
 
d'abord il faut remplir une structure LVITEM :
- son membre iItem contiendra l'index de la ligne (5)
- son membre iSubItem contiendra l'index de la colonne (3)
- son membre pszText contiendra le texte ("leTexte" )
- son membre cchTextMax contiendra le nombre de caractères de la chaine pointée par pszText (strlen(pszText))
- son membre mask doit contenir des constantes sur l'état de la structure : ce sont des switchs qu'on active en fonction des membres indiqués
 
avec une petite subtilité à savoir :  
- si le membre iSubItem == 0, alors la structure LVITEM ne concerne pas le subitem, mais l'item. dans ce cas, son membre lParam devient valide. on le remplit donc, généralement avec la valeur de iItem.
la conséquence est que le membre mask de la structure LVITEM doit être flaggé avec la constante LVIF_PARAM.
- dans le cas contraire, la structure concerne un subitem. dans ce cas, on se fout du membre lParam.
 
le membre mask aura donc la valeur suivante : LVIF_TEXT (indiquant qu'on utilise le champ pszText de la structure)
 
une fois la structure remplie, on la file en paramètre à la macro ListView_InsertItem et basta !
 
exemple de code (saisi à l'arrache dans le forum, on suppose que ton controle ListView a comme identifiant IDC_LISTVIEW, et que le hWnd de la fenêtre qui contient le ListView est hWndParentDlg) :

Code :
  1. LVITEM item;
  2. char *texte = "leTexte";
  3. item.iItem = 5;
  4. item.iSubItem = 3;
  5. item.pszText = texte;
  6. item.cchTextMax = strlen(texte);
  7. item.mask = LVIF_TEXT;
  8. ListView_InsertItem (GetDlgItem(hWndParentDlg, IDC_LISTVIEW), &item);


 
références :
ListView_InsertItem : http://msdn.microsoft.com/library/ [...] rtitem.asp
 
le message LVM_INSERTITEM (qui est encapsulé par la macro ListView_InsertItem) :
http://msdn.microsoft.com/library/ [...] rtitem.asp
 
la structure LVITEM :
http://msdn.microsoft.com/library/ [...] lvitem.asp
 
 
Win32, je maitrise [:kbchris]


Message édité par Harkonnen le 07-05-2005 à 22:43:59

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-05-2005 à 23:55:26    

Merci pour cette réponse super complète mais mon problème c'est pas ça, j'arrive à faire l'insertion, ce que j'arrive pas c'est à editer. J'ai fais un petit screenshot comme ça, ça sera plus clair.
 
- lien retiré -
 
Donc là je clique grace à une procedure sur la case que je veux editer, le problème c'est que ça marche qu'avec un item et pas un subitem.  
Donc en fait le problème c'est que si on peut effectivement editer les subitem, je sais pas où ça merde, dans la declaration de la listview ? Dans les propriétés de l'item ? Dans la procedure d'edition ? J'ai un peu du mal je fais de l'api win32 depuis 1 semaine :p


Message édité par Erendis le 17-05-2005 à 11:45:20
Reply

Marsh Posté le 07-05-2005 à 23:57:57    

Erendis a écrit :

Merci pour cette réponse super complète mais mon problème c'est pas ça


 [:fenston]

Reply

Marsh Posté le 07-05-2005 à 23:57:57   

Reply

Marsh Posté le 08-05-2005 à 14:57:08    

Bon je pense avoir identifié là où ça va pas.
C'est la fonction hEdit=ListView_GetEditControl(hList);
Dans hList j'ai le handle vers la listview, et hEdit recupere l'item qui est édité.
Comme ça édite directement l'item et pas le subitem, si on utilise cette fonction on peut pas éditer de subitem (à priori).
 
Donc il faudrait reecrire une fonction qui place un controle d'edition à la place du subitem selectionné, j'ai vu ça en C++ en utilisant c++ mais je demande si on peut faire ça avec l'api windows de base ?
 

Reply

Marsh Posté le 10-05-2005 à 12:33:02    

Non en fait c'est pas ça, je suis toujours bloqué.
En fait pas défaut dans une listview, on ne peut editer que le texte de la premiere colonne (Item), et la selection et l'edition du champ dans la listview se fait automatiquement.
Je me demande si c'est possible d'ecrire une fonction qui remplace l'edition de base, et qui permet d'editer des subitems, par exemple en creant un control d'edition dans la listview.
 
Comme je débute je me demande si c'est seulement possible et pas trop difficile à coder.
 
Sinon il faudrait que je trouve autre une solution, mais ouvrir une fenetre de dialogue avec tous les champs de chaque ligne, si y'en a plus d'une dizaine, ça va vite devenir ingérable.
 
En tout cas j'ai jamais été autant bloqué -_-  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed