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

vincentstryckmans 230 Messages postés lundi 5 avril 2004Date d'inscription 25 octobre 2006 Dernière intervention - 23 déc. 2004 à 10:20 - Dernière réponse : vincentstryckmans 230 Messages postés lundi 5 avril 2004Date d'inscription 25 octobre 2006 Dernière intervention
- 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
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 23 déc. 2004 à 15:07
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.

Merci jmp77 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de jmp77
cupracing 28 Messages postés vendredi 3 novembre 2000Date d'inscription 24 février 2005 Dernière intervention - 23 déc. 2004 à 11:12
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
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 23 déc. 2004 à 11:52
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 23 déc. 2004 à 14:47
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
cupracing 28 Messages postés vendredi 3 novembre 2000Date d'inscription 24 février 2005 Dernière intervention - 23 déc. 2004 à 14:55
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 23 déc. 2004 à 15:56
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
vincentstryckmans 230 Messages postés lundi 5 avril 2004Date d'inscription 25 octobre 2006 Dernière intervention - 24 déc. 2004 à 10:45
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.