Ansireplace str et ansireplacetext : bug ?? [Résolu]

Messages postés
230
Date d'inscription
lundi 5 avril 2004
Dernière intervention
25 octobre 2006
- - Dernière réponse : vincentstryckmans
Messages postés
230
Date d'inscription
lundi 5 avril 2004
Dernière intervention
25 octobre 2006
- 24 déc. 2004 à 10:45
Salut,

Dans un grid, l'utilisateur doit encoder des pourcentages. Pour éviter un plantage dans la converision strtoint, j'utilise un try except mais avant cela , je veux retirer le symbole % si l'utilisateur la encoder.

Pour cela, j'utilise la fonction ansireplacestr pour retirer le symbole % .

Voici le code :

try
if cells[2,i] <> '' then
begin
cells[2,i] := AnsiReplaceText(cells[i,2],'%','');
resp_ok := not (((StrToInt(cells[2,i]) < 0) or (StrToInt(cells[2,i]) > 100)));
end;
except
on EConvertError do resp_ok := false;
end;

Lorsque cells[2,i] contient '100%' par exemple, la fonction ansireplacestr fait correctement son travail.
Si cells[2,i] contient '100', la fonction ansireplacestr efface le contenu de cells[2,i] et la conversion strtoint génère alors l'exception.

Moi y en a pas comprendre.

J'ai essayé avec ansireplacetext, mais avec le même résultat.

:big) Joyeux Noël et année 2005 sans bug :big)

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
1232
Date d'inscription
lundi 4 février 2002
Dernière intervention
4 octobre 2006
3
Merci
Ok c'est bon je viens de tester avec un stringgrid et le probleme provient bien des cells.
Il faut passer par une variable tampon pour que ca fonctionne correctement comme ceci :
procedure TForm1.BitBtn1Click(Sender: TObject);

Const I = 1;

Var
Temp : String;

begin

   With stringgrid1 do
   begin

      Try
      Temp := cells[2,i];

         if Temp <> '' then
         begin
         Cells[2,i] := AnsiReplaceText(Temp,'%','');
         //resp_ok := not (((StrToInt(cells[2,i]) < 0) or (StrToInt(cells[2,i]) > 100)));
         end;
      except
      on EConvertError do resp_ok := false;
      end;
   end;
end;


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de jmp77
Messages postés
28
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
24 février 2005
0
Merci
bjr Vincent effectivement c'est plutôt bizarre ça, comme toi je ne comprend pas bien pourquoi la fonction efface tout quand il ne trouve pas le champ recherché !! .
J'ai pas pu tester moi car je n'ais que la version Delphi 4 et ces fonctions Ansireplacestr ... ne sont pas encore présentes.

Moi pour faire ce genre de manipulation j'utilise la fonction Pos et Trim:

Var
   S: string;
begin
     S := '100%';
     while Pos('%', S) > 0 do S[Pos('%', S)] := ' ';
     S := Trim(S);

     if strtoint(S) < 0 then ...
end;


Joyeuses fêtes de fin d'année à tous ...

@lex
Commenter la réponse de cupracing
Messages postés
1232
Date d'inscription
lundi 4 février 2002
Dernière intervention
4 octobre 2006
0
Merci
Hello,

Essaye comme cela :
try
if (cells[2,i] <> '') and Pos('%',cells[2,i])>0 then
begin
cells[2,i] := AnsiReplaceText(cells[i,2],'%','');
resp_ok := not (((StrToInt(cells[2,i]) < 0) or (StrToInt(cells[2,i]) > 100)));
end;
except
on EConvertError do resp_ok := false;
end;

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Commenter la réponse de jmp77
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
hello,

alors moi g posé un edit, une checkbox et un button, sur le button g mis :

procedure TForm1.Button1Click(Sender: TObject);
var
resp_ok: boolean;
begin
try
if edit1.text <> '' then
begin
edit1.text := AnsiReplaceText(edit1.text,'%','');
resp_ok := not (((StrToInt(edit1.text) < 0) or (StrToInt(edit1.text) > 100)));
end;
except
on EConvertError do resp_ok := false;
end;
checkbox1.Checked := resp_ok;
end;

- je mets "100%" ds le edit, le edit devient "100" et la checkbox est cochee
- je mets "100" ds le edit, le edit reste "100" et la checkbox est cochee aussi

pas d'erreur... l'erreur viendrais des cells ?

ps :
cupracing : pourquoi remplacer par ' ' puis faire un Trim au lieu de remplecer de suite par '' !??

N'oubliez pas de cliquer sur Réponse acceptée lorsque ma réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
Commenter la réponse de JulioDelphi
Messages postés
28
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
24 février 2005
0
Merci
En effet le problème viendrait peut etre des celles ??

en fait pour répondre à ta question JulioDelphi je mets pas directement '' car il me semblais que ça ne marchais pas... mais je vais quand même vérifer lol :blush)
Commenter la réponse de cupracing
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
Bonnes reponses d'équipe :D

N'oubliez pas de cliquer sur Réponse acceptée lorsque ma réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : mon site refait ! Delphi power !
Commenter la réponse de JulioDelphi
Messages postés
230
Date d'inscription
lundi 5 avril 2004
Dernière intervention
25 octobre 2006
0
Merci
Merci à vos les potes.

Comme dit Julio voici une belle réponse d'équipe.

N'empècher que ... saloperie de cells va >:)

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
Commenter la réponse de vincentstryckmans

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.