Test sur le Subitem d'un Tlistview toujours faux

Résolu
emmanuelgo Messages postés 58 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 13 avril 2005 - 2 févr. 2005 à 03:36
emmanuelgo Messages postés 58 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 13 avril 2005 - 4 févr. 2005 à 14:44
Salut à tous...

voici mon problème, c'est surement très bête, mais j'ai le nez dessus depuis pas mal de temps et je ne vois pas le problème..j'ai fait une recherche mais rien..

voilà:

ListCount := LFilesToDel.Items.Count-1;
.....
for i := 0 To ListCount do begin;
if LFilesToDel.Items[i].SubItems.Text='Fichier' then....
else...
..

où LFilesToDel est un TListView à deux colonnes...

ce test est toujours faux, et execute donc toujours la procédure aprés le else et jamais celle aprés le then..alors que evidemment j'ai bien le subitem = 'Fichier' (j'ai même re-vérifier en l'affichant à chaque fois dans un label, au cas où il y ait des modification dessus).

Qu'est- ce qui ne fonctionne pas dans ce test ??

merci d'avance...

ps: j'utilise Delphi 6 personnel.

6 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
2 févr. 2005 à 08:16
Salut,



1 - Si le point-virgule que j'ai mis en rouge existe dans ton
programme, il n'y a pas de boucle ! En sortant, i est égal à
ListCount+1, c'est une ligne qui n'existe pas, et normalement il
devrait t'envoyer aux prunes.




for i := 0 to ListCount do begin;



2 -
SubItems.Text est terminé par les caractères #$0D#$0A (tu peux vérifier
dans les points de suivi) et ta comparaison sera toujours fausse.
Utilise plutôt SubItem[0] (0 : deuxième colonne, 1 : troisième colonne,
etc ....). Ces chaînes ne comprennent pas les caractères CR-LF.




if LFilesToDel.Items[i].SubItems.[0]='Fichier' then...






Ken@vo

____________________

Code, Code, Codec !
3
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
4 févr. 2005 à 07:52
Salut



Excuse-moi pour le premier point, il n'y a pas de pb grace au begin, mais si tu fais

for i := 0 To ListCount do ;
if LFilesToDel.Items[i].SubItems.Text='Fichier' then....


le point-virgule après le
for marque la fin d'une instruction (nulle), et comme il n'y a pas de
begin, c'est la seule à être exécutée par la boucle. Ci dessus, la
boucle ne sert à rein d'autre qu'à mettre i à la valeur ListCount+1.



T'as bien compris le deuxième point. Les caractères #$0D (ou #13) et
#$0A (#10) font partie des caractères de contrôle ASCII (non
imprmables), ils permettent de dépacer le chariot des télétypes et
imprimantes texte.

#$0A #10 LF =Line Feed = Descendre d'une ligne

#$0D #13 CR = Carriage Return = Retour chariot à gauche de la page.

Il y a aussi :

#$0C #12 FF = Form Feed = Saut de page

#$07 BL Bell = Clochette

#$09 TAB Tabulation



.....





Ken@vo

____________________

Code, Code, Codec !
3
cs_freax Messages postés 32 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 27 avril 2005
2 févr. 2005 à 04:56
A tu verifier ce que ton ListFilesToDel.Items.Count-1



fait un ShowMessage(IntToStr(ListFilesToDel.Items.Count-1)); aprés ton affection
0
emmanuelgo Messages postés 58 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 13 avril 2005
2 févr. 2005 à 06:26
merci de ta réponse rapide (tu ne dors pas??)

LFilesToDel.Items.Count-1 est à 0 aprés la premiere affectation à la liste, à 1 aprés la deuxieme affectation etc...

la boucle for commence donc à 0 jusque LFilesToDel.Items.Count-1 pas de problèmes avec ça, d'autant plus que la procédure du else est executé...
le problème ne vient donc pas de la boucle mais bien du test...
quand j'enlève ce test, la procédure du then est bien executée aussi...

merci tout de même....
0

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

Posez votre question
emmanuelgo Messages postés 58 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 13 avril 2005
3 févr. 2005 à 00:45
merci beaucoup ça marche...
il y avait bien un ' ; ' aprés le for, mais ce n'est pas ça qui posait problème, mais bien le deuxieme point (j'ai fait la modif 2 en enlevant puis en remettant le ' ; ', ça marche dans les deux cas)
En fait je n'ai pas bien compris ton explication concernant le 1er point (l'histoire du ' ; ' aprés le for).... si ça te dérange pas de m'expliquer de façon plus détaillé, tu es le bienvenu !!!

Par contre, si j'ai bien compris :
si j'ai le mot 'fichier' dans le subitem, alors subitem.text me donnera : 'fichier#$0D#$0A'...'est-ce bien ça? Est-ce cela que tu appelles 'caractères CR-LF'? à quoi correspondent ces caractères?

si tu veux bien appronfondir tes explications, ce serait cool...sinon, merci quand même, ca me décoince le code !
0
emmanuelgo Messages postés 58 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 13 avril 2005
4 févr. 2005 à 14:44
on en apprend tous les jours...merci !!!!
0
Rejoignez-nous