Ansireplace str et ansireplacetext : bug ??

Résolu
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006 - 23 déc. 2004 à 10:20
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre 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

7 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
23 déc. 2004 à 15:07
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.
3
cupracing Messages postés 27 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 24 février 2005 1
23 déc. 2004 à 11:12
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
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
23 déc. 2004 à 11:52
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.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
23 déc. 2004 à 14:47
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 !
0

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

Posez votre question
cupracing Messages postés 27 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 24 février 2005 1
23 déc. 2004 à 14:55
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)
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
23 déc. 2004 à 15:56
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 !
0
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
24 déc. 2004 à 10:45
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
0
Rejoignez-nous