Forcer la saisi d'un integer [Résolu]

nou366 92 Messages postés samedi 21 janvier 2006Date d'inscription 10 octobre 2010 Dernière intervention - 11 févr. 2006 à 07:41 - Dernière réponse : jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention
- 13 févr. 2006 à 21:02
Bonjour,
Petite question: Comment faire pour qu'un utilisateur d'une application rentre un integer dans un edit.
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 11 févr. 2006 à 13:40
3
Merci
pour faire ce que tu demandes il faut convertir le texte en integer et gérer l'exception EConvertError.

var valeur:integer;

try

valeur:=strtoint(edit1.text);

except

on E: EConvertError do

ShowMessage('Veuillez saisir un entier');

end; attention pour l'exécuter dans l'environnemnt DELPHI il faut soit
déactivé le debbogger soit faire F8 pour revenir dans le programme;



@+

jlen

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 11 févr. 2006 à 09:34
0
Merci
salut,

dans l'évènement on kyepress de l'Edit tu mets un filtre:

procedure TFrorm1.Edit1KeyPress(Sender: TObject; var Key: Char);

const Valid = #13, '0'..'9';

var buffer:string;

valeur:integer;

begin

with sender as Tedit do

if key ='-' then

begin

buffer:= Text;

if buffer ='' then buffer:= '0';

if buffer<>'0' then

begin

if pos('-',buffer) =0 then buffer:= '-'+buffer

else delete(buffer,1,1);

end;

Text: =buffer;key:= #0;

end ;

if not(key in valid) then key: =#0;

end;

ensuite dans le onchange tu peux ranger la valeur dans le tag

procedure TFrorm1.Edit1Change(Sender: TObject);

var valeur:integer;

buffer:string;

begin

with sender as Tedit do

begin

valeur:= 0;

buffer:=text;

if pos('-',buffer) =2 then

begin delete(buffer,1,1);text:= buffer; end ;

if Text<>'' then valeur: =strtoint(Text);

Tag:=valeur;

end;

end;

salut

@+

len
Commenter la réponse de jlen100
nou366 92 Messages postés samedi 21 janvier 2006Date d'inscription 10 octobre 2010 Dernière intervention - 11 févr. 2006 à 13:01
0
Merci
Merci pour ta réponse, mais n'y a til pas qqch du genre
if(edit.text = pas integer) then showmessage ( 'veuillez saisir un entier')
Commenter la réponse de nou366
nou366 92 Messages postés samedi 21 janvier 2006Date d'inscription 10 octobre 2010 Dernière intervention - 11 févr. 2006 à 13:42
0
Merci
Sympa de ta part, grand merci
a+;
Commenter la réponse de nou366
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 11 févr. 2006 à 23:50
0
Merci
A noter que la deuxième solution est préférable en quelque sorte (à condition qu'elle soit réalisée juste avant tout traitement de la valeur entrée, si possible dans la même procédure) car avec la première, aussi complète soit-elle, il persiste une faille : celle du "collage" de texte à partir du presse-papiers...
On y pense pas souvent, mais cela peut être la source de nombreuses erreurs !

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de ni69
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 12 févr. 2006 à 07:53
0
Merci
salut ni69,

l'ideal étant de combiner les 2 solutions

1) tu filtres la saisie

2) (en le traitant dans le onchange au lieu du message (ou en plus) tu renvoies une valeur par défaut (0 par exemple)

ceci te donnes un programme plus agréable à utiliser



@+

jlen
Commenter la réponse de jlen100
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 12 févr. 2006 à 10:50
0
Merci
Effectivement jlen100

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de ni69
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 12 févr. 2006 à 23:19
0
Merci
j'avais fait une petite fonction bete et idiote qui permet de filtrer rapidement un entier saisi :

function IsValidInt(const value : string) : boolean;
var x : integer;
begin
result := false;
for x := 1 to length(value) do if not (value[x] in ['0'..'9']) then exit;
result := true;
end;

la meme pour les flottants :

function IsValidFloat(const value : string) : boolean;

var x : integer;

begin

result := false;

for x := 1 to length(value) do if not (value[x] in ['0'..'9','.',',']) then exit;

result := true;

end;


a placer dans le onchange du edit, exemple :

if IsValidInt(Edit1.Text) then
edit1.font.color := clblue
else
edit1.font.color := clred;

si la valeur doit etre un entier/flottant positif il y'a une meilleure alternative :

if StrToIntDef(edit1.text,-1) = -1 then showmessage('vous devez entrer un entier positif');
if StrToFloatDef(edit1.text,-1) = -1 then showmessage('vous devez entrer un flottant positif');


<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Commenter la réponse de f0xi
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 13 févr. 2006 à 00:30
0
Merci
Attention fOxi, il y a une erreur aussi si la chaîne envoyée en paramètre est vide ! Il y aura une erreur aussi si la chaîne traitée par la fonction est telle que '12,35,6' : ton code la reconnaîtra quand même comme un flottant valide, malgré les deux virgules présentes !

Voici un exemple d'amélioration de ta fonction de validification des nombres flottants qui accepte aussi les flottants négatifs :

function IsValidFloat(const value : string) : boolean;
var
x : integer;
begin
result := false; // On initialise le résultat à false
if length(value) =0 then exit; // Test de chaîne vide...
if (value[1]= '-') and (length(value) =1) then exit; // Si le nombre est '-' il n'est pas considéré comme valide.
if Pos('-', Copy(value, 2, length(value))) <> 0 then exit; // Si il y a un deuxième signe moins quelque-part dans le nombre, on arrête.
for x := 1 to length(value) do begin // On parcours tous les caractères...
if value[x] =DecimalSeparator then if Pos(DecimalSeparator, Copy(value, x+1, length(value))) <> 0 then exit; // Si on trouve un séparateur décimal, on vérifie qu'il n'y en a pas un deuxième après
if not (value[x] in ['0'..'9',DecimalSeparator]) then exit; // Test des caractères valides...
end;
result := true; // Si on en arrive là, c'est que tous les tests ont réussi !
end ;

[A noter que la variable DecimalSeparator, directement utilisable, contient le séparateur décimal par défaut en vigueur sur l'ordinateur]

Il est bien sûr plus facile d'utiliser la fonction StrToFloatDef si l'on sait par avance que le flottant devra être positif !
Ce code illustre une manière de procéder... Ce n'est sans doute pas la seule, donc si il y a des choses à rajouter ou à modifier, n'hésitez pas à faire des suggestions !

@+
Nico { http://www.ni69.new.fr/ }

<hr size ="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de ni69
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 13 févr. 2006 à 00:35
0
Merci
Sans oublier que la gestion des erreurs de transtypage est beaucoup beaucoup plus efficace...
J'ai simplement réalisé ce code à titre d'information, mais j'encourage l'utilisation de la méthode avancée par jlen100 sur ce point

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de ni69
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 13 févr. 2006 à 17:30
0
Merci
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 13 févr. 2006 à 17:35
0
Merci
petit probleme d'envoi de réponse depuis ce matin Grrrrrrr


il y a aussi la source de japee pour le filtrage de flottants:


ici
il faut lui rajouter le traitement de l'erreur
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 13 févr. 2006 à 17:42
0
Merci
test de la textbox evoluée sous IE
Commenter la réponse de jlen100
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 13 févr. 2006 à 19:51
0
Merci
Tu as des problèmes avec la RichTextBox à ce que je vois jlen100 ?

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de ni69
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 13 févr. 2006 à 20:05
0
Merci
salut oui depuis ce matin impossible de poster sous firefox à partir de la richtextbox il afut que je passe par IE



@+

jlen
Commenter la réponse de jlen100
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 13 févr. 2006 à 20:42
0
Merci
Sinon, je ne connaissais pas la source de japee, mais il persite le problème au niveau du Copier/Coller dans son code...

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de ni69
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 13 févr. 2006 à 21:02
0
Merci
oui c'est ce que j'expliquais dans le post mais il a été scratché à l'envoi.



l'exception étant valable pour tout les types de conververtion on doit
pouvoir l'utiliser de la même façon lors de la convertion.

on peut également l'intégrer dans la fonction (en test final) et
renvoyer false si la conversion echoue en mettant éventuellement l'edit
à 0. ou un message du genre:

"Messieurs vous avez copié un virus qui n'est pas un nombre! Vous
avez 10 secondes pour effacer cette saisie avant destruction du PC...."

on peut également le test dans le onchange.

En fait tout est possible



@+

jlen
Commenter la réponse de jlen100

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.