Test sur le Subitem d'un Tlistview toujours faux

Résolu
Signaler
Messages postés
58
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
13 avril 2005
-
Messages postés
58
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
13 avril 2005
-
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

Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
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 !
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
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 !
Messages postés
32
Date d'inscription
vendredi 29 novembre 2002
Statut
Membre
Dernière intervention
27 avril 2005

A tu verifier ce que ton ListFilesToDel.Items.Count-1



fait un ShowMessage(IntToStr(ListFilesToDel.Items.Count-1)); aprés ton affection
Messages postés
58
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
13 avril 2005

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....
Messages postés
58
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
13 avril 2005

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 !
Messages postés
58
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
13 avril 2005

on en apprend tous les jours...merci !!!!