View Full Version : Composant ListBox en colonne
CerfVolant
10-17-2006, 11:09 PM
Bonsoir,
Peut-on (j'ai pas trouvé tout seul) utiliser le compo ListBox en ayant plusieurs colonnes à la manière d'un grid.
Ou y a t il un autre composant qui m'aurait échappé ??
kornalius
10-18-2006, 12:33 AM
Utilisez le ListView. Vous pouvez y ajouter des colonnes, regardez les functions dans le SWAPI.ppl qui commencent par ListView_
CerfVolant
10-18-2006, 01:57 PM
Y aurais t'il un exemple.
cela fait 3 heures que je teste toutes les possibilitées et je narrive pas a afficher 3 colonnes.
Meme en regardant le fichier SWAPI.ppl et l'aide impossible...
Help, help me if you can i'm feeling wrong !!! (Sur l'air des beetles of course)
kornalius
10-18-2006, 06:58 PM
Vous devez créer la ListView dans le PIDE et ensuite dans le code d'initialisation vous devez faire ceci:
// Ajoute une colonne de 100 pixels à l'index 0.
ListView_AddColumn (LV$, 0, "Column #1", 100, 0);
// Ajoute une colonne de 125 pixels à l'index 1.
ListView_AddColumn (LV$, 1, "Column #2", 125, 0);
// Ajoute l'item à l'index 0.
ListView_Add (LV$, "Item #1");
// Ajoute le sous-item à la colonne 1 pour l'item #0.
ListView_AddSub (LV$, 0, "Item #1 - Col #1", 1);
Je viens de voir que la routine ListView_AddSub n'est pas la dans le Swapi.ppl. Voici la routine:
func ListView_AddSub(ListView$, index$, text$, column$)
local(cnt$, lvItem$);
struct(lvItem$, LVITEM);
lvItem.iItem$ = Index$;
lvItem.iSubItem$ = column$;
lvItem.Mask$ = LVIF_TEXT;
lvItem.pszText$ = text$;
lvItem.cchTextMax$ = length(lvItem.pszText$);
return(SendMessage(ListView$, LVM_INSERTITEM, 0, &lvItem$));
end;
C'est le mieux que l'on puisse faire pour le moment.
CerfVolant
10-18-2006, 10:30 PM
Désolé de déranger de nouveau,
j'ai ajouter la fonction func ListView_AddSub dans swapi.ppl, mais cette fonction ne fonctionne visiblement pas bien, l'exemple donné permet d'afficher la premiere colonne (celle du ListView_Add, mais pas les autres !!
kornalius
10-18-2006, 10:40 PM
Ma faute, voici la nouvelle function:
func ListView_SetSub(ListView$, index$, text$, column$)
local(cnt$, lvItem$);
struct(lvItem$, LVITEM);
lvItem.iItem$ = Index$;
lvItem.iSubItem$ = column$;
lvItem.Mask$ = LVIF_TEXT;
lvItem.pszText$ = text$;
lvItem.cchTextMax$ = length(lvItem.pszText$);
return(SendMessage(ListView$, LVM_SETITEM, 0, &lvItem$));
end;
J'ai changé le nom aussi.
Code à ajouter dans le Form Creation Code:
ListView_AddColumn(ListView101$, 1, "Column #1", 100, 0);
ListView_AddColumn(ListView101$, 2, "Column #2", 100, 0);
ListView_Add(ListView101$, "Item #1");
ListView_SetSub(ListView101$, 0, "Sub #1", 1);
ListView_SetSub(ListView101$, 0, "Sub #2", 2);
ListView_Add(ListView101$, "Item #2");
kornalius
10-18-2006, 10:46 PM
N'oubliez pas d'activer le style LVS_REPORT et d'enlever LVS_ICON.</p>
</p> [br]../../e107_files/public/1161207992_1_FT837_listviewimg.jpg
CerfVolant
10-18-2006, 11:52 PM
Fonction Marchant parfaitement, j'avais bien vu qu'il fallait enlever LVS_REPORT et LVS_ICON, j'ai aussi cliquer sur le NoSortHeader, je ne veut pas de tri.
Merci de cette réactivité, vraiment c'est super, je ne regrette pas d'avoir opter pour votre soft !lol !lol
CerfVolant
10-19-2006, 11:06 PM
Encore une question sur les ListView
y a til une possibilité pour surligner en bleu toute la ligne sélectionné et pas uniquement l'item principal.
Après je crois que je pourrais vous faire un tuto sur le sujet, je vais finir par etre incollable (Quand vous m'aurez transferer tout votre savoir !!!)
Merci
kornalius
10-20-2006, 01:23 AM
Hehe.
To select the whole line, as per Microsoft, LVS_EX_FULLROWSELECT is the key. However it is not in the Classes.ini just yet. I will make sure the extra settings are added before release 1.06 tomorrow.
CerfVolant
10-20-2006, 07:44 AM
Marvelous, Wonderfull, you are a king,
votre rapidité me permet d'avancer dans mon soft à grand pas !amazed !lol
kornalius
10-20-2006, 11:21 AM
Vous savez quoi? Vos questions aussi. Non c'est vrai. PPL devient de semaine en semaine, plus stable et évolue rapidement. Je n'ai pas le luxe de me payer une équipe de testing donc le plus de bobos que l'on trouve en une semaine, le plus de "bug-fix" il y a pour le update de la semaine!
kornalius
10-20-2006, 11:36 AM
Voici le fix, tout est dans PPL pour que ca fonctionne deja:
PostMessage(ListView101$, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
Je vais just rajouter l'option de l'avoir dans le PIDE VFB si je peux plus tard.
CerfVolant
10-20-2006, 10:09 PM
le fix fonctionne impecablement
pour le moment pas de soucis j'avance !!
kornalius
10-21-2006, 04:01 AM
J'ai ajuster le PIDE visual form builder pour supporter les styles étendues. Le LVS_EX_FULLROWSELECT va apparaitre dans la liste des styles. Vous n'allez pas avoir besoin de taper aucune ligne de code dans la 1.06.
CerfVolant
10-21-2006, 11:01 PM
n'ayant pas trouvé les fonction dont j'avais besoin dans le List View, je me suis largement inspiré de vos fonction pour en créer 2 nouvelles.
Cela permet de changer un item dans la colonne de base ou dans une sous colonne.
pour vous evitez de les reinventer, les voici, vous n'aurez plus qu'a les integer dans les prochaines versions.
Vous pouvez changer le nom si vous voulez !!
proc ListView_Change(ListView$, index$, text$, column$)
local(cnt$, lvItem$);
struct(lvItem$, LVITEM);
lvItem.iItem$ = index$;
lvItem.iSubItem$ = 0;
lvItem.Mask$ = LVIF_TEXT;
lvItem.pszText$ = text$;
lvItem.cchTextMax$ = length(lvItem.pszText$);
SendMessage(ListView$, LVM_SETITEM, 0, &lvItem$);
end;
proc ListView_Change_SetSub(ListView$, index$, text$, column$)
local(cnt$, lvItem$);
struct(lvItem$, LVITEM);
lvItem.iItem$ = index$;
lvItem.iSubItem$ = column$;
lvItem.Mask$ = LVIF_TEXT;
lvItem.pszText$ = text$;
lvItem.cchTextMax$ = length(lvItem.pszText$);
SendMessage(ListView$, LVM_SETITEM, 0, &lvItem$);
end;
kornalius
10-22-2006, 08:08 PM
Merci beaucoup CerfVolant.
En regardant vos fonctions, la première Change et disponible deja, ListView_Set(). Je vais definitivement ajouter ListView_SetSub.
kornalius
10-23-2006, 05:25 PM
CerfVolant, avez vous essayer ListView_Set() avec un item$ pour la colonne?
CerfVolant
10-23-2006, 05:39 PM
Au depart j'ai bien vu cette fonction dans l'aide, mais je ne comprenait pas le Str$
func ListView_Set(ListView$, index$, item$, str$)
et avec je n'ai jamais reussi a changer un item par un autre
ce que je fait sans soucis avec les deux fonctions que j'ai faites
j'ai donc essayé pour voir
ListView_Set() avec un item$ pour la colonne
ListView_Set(LISTVIEW162$, ligne$, colonne$, "essai");
mais cela n'a aucun effet
CerfVolant
11-01-2006, 12:01 PM
J'ai toujours un probleme pour renommer l'item de la colonne d'origine dans mon listview :
J'ai un Listview de 3 Clonnes :
je n'arrive pas a actionner la fonction
ListView_Set(ListView$, index$, item$, str$)
ListView_AddColumn(LISTVIEW168$, 0, "Client", 150, 0);
ListView_AddColumn(LISTVIEW168$, 1, "Ville", 130, 0);
ListView_Set(LISTVIEW168$, 2, "Compte", 0); // ne fonctionne pas
merci de me donner un petit eclairissement sur cette fonction, notament le str$.
kornalius
11-01-2006, 05:19 PM
func ListView_Set(ListView$, index$, item$, str$)
ListView_Set(LISTVIEW168$, 2, "Compte", 0);
"Compte" devrait être le dernier parametre.
ListView_Set(LISTVIEW168$, 2, 0, "Compte");
CerfVolant
11-01-2006, 11:11 PM
ListView_Set(LISTVIEW168$, 2, 0, "Compte");
Ne fonctionne pas ??
kornalius
11-02-2006, 12:16 AM
Le contraire peut-être?
ListView_Set(LISTVIEW168$, 0, 2, "Compte");
L'index c'est la colonne et l'item c'est la ligne de l'item.
CerfVolant
11-02-2006, 10:21 PM
Idem,
en manipulant les parametres dans tous les sens, je n'ai toujours pas de resultats, Items reste toujours en tete de colonne :((
kornalius
11-03-2006, 02:35 AM
Avec la command ListView_SetSub() que vous avez écrit il y a un temps, est-ce que ça fonctionne?
CerfVolant
11-03-2006, 02:09 PM
Non ca ne fonctionne pas non plus,
En fait, il est impossible de modifier les entetes de colonnes, quand on les créent on peut leur donner un nom, mais une fois creé je ne trouve pas le truc pour changer le libellé.
Pour les lignes autres que l'entete il n'y a pas de probleme pour les changer
CerfVolant
11-06-2006, 12:28 AM
Up!!
kornalius ??
Pas d'idée !sad
kornalius
11-06-2006, 06:04 PM
Je vais regarder cela pour la version de cette semaine.
CerfVolant
11-06-2006, 10:14 PM
Ok Merci :)
BIGBEN
11-07-2006, 10:37 PM
:! Une Solution pour renommer les entêtes de colonnes :p
struct (lvc$, LVColumn);
lvc.mask$ = LVCF_TEXT ;
new(buffer$, 255 * 2);
// * 2 because WIDECHAR are 2 bytes on PcPocket can be less
lvc.pszText$ = &buffer$;
lvc.cchTextMax$ = 255;
// length Buffer$
//************************
//***** read column header
//***********************
SendMessage(listview$,LVM_GETCOLUMN,ColIndex,&lvc$ );
text$=Char(lvc.pszText$);
showmessage(a$,"\n",text$);
//************************
//***** Write column header
//***********************
Buffer$=ApiChar("newname");
A$=SendMessage(listview$,LVM_SETCOLUMN,ColIndex, &lvc$);
free(Buffer$,lvc$);
Vous en souhaitant bonne utilisation ;)
kornalius
11-07-2006, 11:51 PM
Merci, BIGBEN, je vais tester et inclure une nouvelle function dans le swapi.ppl.
Ca fait dsu bien d'avoir un coup de main de temps en temps! :)
CerfVolant
11-08-2006, 11:58 AM
merci bigben,
je vais tester tes fonctions et les appliquer dans mon prog, en attendant que kornelius les inclues dans swapi.
c'etait pas un gros pb, mais visuellement c'est mieux d'avoir une entete personnalisée
CerfVolant
11-08-2006, 11:43 PM
Genial,
Ca fonctionne 1pec,
Merci Monsieur BigBen (Oui je dit Monsieur !!)
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.