FILTRER LA SAISIE VALIDE D'UN NOMBRE ENTIER, FLOTTANT, SIGNÉ OU NON, DANS UN TED
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
25 juin 2005 à 23:09
EddiTheHead
Messages postés58Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 2 juin 2006
-
30 août 2005 à 18:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
EddiTheHead
Messages postés58Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 2 juin 2006 30 août 2005 à 18:55
Juste.
Faudrait poser la question dans le forum.
Pioko
Messages postés2Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention29 août 2005 29 août 2005 à 03:28
Si je fais un copier/coller d'un texte qui ne représente pas un nombre, par exemple le texte : "ca ne marche pas", mon TEdit contient alors ce texte ... qui n'est pas un nombre valide.
Or ceci est contraire à ce qu'affirme faire ce morceau de code : "FILTRER LA SAISIE VALIDE D'UN NOMBRE ENTIER, FLOTTANT, SIGNÉ OU NON, DANS UN TEDIT".
Je cherche encore une solution simple si possible.
EddiTheHead
Messages postés58Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 2 juin 2006 28 août 2005 à 19:44
Qu'est-ce qui ne marche pas?
Plus d'infos, S.V.P.
Pioko
Messages postés2Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention29 août 2005 26 août 2005 à 17:04
OK, c'est bien tout ça mais qu'est-ce qui se passe si on colle un texte du style "ca ne marche pas" ?
Je n'ai pas fait le test mais je suis certain que CA NE MARCHE PAS !
Alors, une solution ?
EddiTheHead
Messages postés58Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 2 juin 2006 19 août 2005 à 17:01
Slt,
Je me suis permis de modifier ta source en rajoutant une limite de saisie.
J'aimerai avoir vos avis.
On peut utiliser un masque différent pour chaque TEdit en utilisant sa valeur TAG.
A déclarer en global (dont l'indice sera le TAG du TEdit) :
---------------------------------------------------------
Const Limite : Array [1..4] Of String = ('9999', '9999', '999,99', '9999,999');
Dans la fonction "NumberIsValid",
déclaration :
-----------
Var Ok : Boolean;
L1, L2, E1, E2 : Byte; // L1, E1 : Le nbre de chiffre avant la virgule
// L2, E2 : Le nbre de chiffre après la virgule
// L pour Limite / E pour le TEdit
Chaine : String // Variable temporaire
Code,
remplacer :
---------
if Ok then Result := K;
par :
---
If Ok Then
If (TEdit(Sender).Tag > 0) And (K In ['0'..'9']) Then // Si TAG > 0 alors travailler avec
// LIMITE[?] => (1)
Begin
// On défini le masque de saisie
L1 := Pos(DecimalSeparator, Limite[TEdit(Sender).Tag]); // Position de la virgule
If L1 = 0 Then L1 := Length(Limite[TEdit(Sender).Tag]) // Si pas de virgule,
// alors nbre entier ...
Else Dec(L1); // ...Sinon, Pos-1 va
// donner le nbre de
// chiffre avant la virgule
L2 := Pos(DecimalSeparator, Limite[TEdit(Sender).Tag]); // Position de la virgule.
// Si = 0, pas de décimal
If L2 > 0 Then L2 := Length(Limite[TEdit(Sender).Tag]) - L2; // Si virgule, on calcul
// le nbre du chiffre
// après la virgule
// On défini à quoi ressemble la valeur entrée dans le TEdit
Chaine := TEdit(Sender).Text; // On stock le contenu du TEdit
Insert(K, Chaine, TEdit(Sender).SelStart+1); // On insert le nouveau caractère
E1 := Pos(DecimalSeparator, Chaine); // Idem que pour L
If E1 = 0 Then E1 := Length(Chaine)
Else Dec(E1);
If Chaine[1] = '-' Then Dec(E1); // Si le signe "-" est présent, on le
// supprime dans le décompte
E2 := Pos(DecimalSeparator, Chaine);
If E2 > 0 Then E2 := Length(Chaine) - E2;
// On teste si on est dans la limite
If (E1 <= L1) And (E2 <= L2) Then Result := K;
End
Else Result :K; // (1)> Sinon, on travaille sans limite
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 27 juin 2005 à 13:57
Devant un tel blabla, japee en reste coi.
En plus que du talent à Delphi dédié,
Kenavo est poète... qui l'aurait supposé ?
L'écran de mon ordi en est tout en émoi.
La souris affolée ne sait plus où pointer.
Mes doigts sur le clavier, devenus malhabiles,
Des touches familières ont perdu le chemin.
Les seuls mots qui me viennent ne sont que du babil...
Que j'ai du mal, en plus, à bien faire rimer !
P-S: Ces pauvres vers minable, veuillez me pardonner ;o)
japee
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 27 juin 2005 à 13:55
"Sur Japee, sans problème, je crois et me repose !"
Kenavo
"Un grand bravo à toi Japee, ce code est fabuleux."
Inekman
Bon, dès que je postule pour un emploi de programmeur, j'ajoute ça sur mon CV.
N'en jetez plus, les gars, ma modestie naturelle souffre terriblement. ;o)
Merci. :)
Inekman
Messages postés291Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention30 juin 2006 26 juin 2005 à 23:47
Qui a dit que les programmeurs étaient des "pisseurs de codes" ? :-)
Un grand bravo à toi Japee, ce code est fabuleux.
Inekman.10/10
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 26 juin 2005 à 20:30
N'ayant de Delphiprog ni compétence ni vice,
Je ne saurais soumettre ce code à pire torture que lui !
Au vu de nombreux posts que mes réponses ont fuit,
Nombreux, les Delphinautes à ce code diront : bis !
Et quand une question, mille fois se re-pose
Comme de la saisie d'un nombre ou d'une date
J'en suis sûr et voyez, jamais cela ne rate,
Sur Japee, sans problème, je crois et me repose !
Ken@vo
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 26 juin 2005 à 15:26
Salut, Delphiprog.
Etant donné ta ruse (à la limite de la perfidie) ;o), le fait que tu n'aies pas pu piéger mon code équivaut à un certificat de fiabilité...
J'accepte volontiers tes félicitations.
Ton expérience et ta rigueur dans l'art de la programmation en Delphi, bien connues des habitués de ce site, font qu'elles valent leur pesant de cacahuètes. :)
Hello, BMSOFT.
Je viens de jeter un coup d'oeil au composant que tu cites.
Il ne fait qu'admettre les chiffres, excluant les "-" (moins) et les "," (virgules), ce qui peut être génant pour la saisie de réels...
Mais on peut tout à fait inclure mon code dans ce composant, ou faire un composant en partant de mon code, ce qui revient au même étant donné l'extrême simplicité de mise en oeuvre...
Merci à vous deux pour l'intérêt que vous avez porté à mon code.
Bonne prog' dominicale ! :p
BMSOFT
Messages postés5Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention24 décembre 2005 26 juin 2005 à 11:21
j'ai trouver un composant sur phidels.com (TCDEdit) qui permet dans ses propriétées de n'admetre que les chiffres, un dérivé de TEDit.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201333 25 juin 2005 à 23:09
Je n'ai pas réussi à piéger ce code made in Japi Soft. ;o)
A conserver comme référence pour le prochain qui demandera comment faire pour...
30 août 2005 à 18:55
Faudrait poser la question dans le forum.
29 août 2005 à 03:28
Or ceci est contraire à ce qu'affirme faire ce morceau de code : "FILTRER LA SAISIE VALIDE D'UN NOMBRE ENTIER, FLOTTANT, SIGNÉ OU NON, DANS UN TEDIT".
Je cherche encore une solution simple si possible.
28 août 2005 à 19:44
Plus d'infos, S.V.P.
26 août 2005 à 17:04
Je n'ai pas fait le test mais je suis certain que CA NE MARCHE PAS !
Alors, une solution ?
19 août 2005 à 17:01
Je me suis permis de modifier ta source en rajoutant une limite de saisie.
J'aimerai avoir vos avis.
On peut utiliser un masque différent pour chaque TEdit en utilisant sa valeur TAG.
A déclarer en global (dont l'indice sera le TAG du TEdit) :
---------------------------------------------------------
Const Limite : Array [1..4] Of String = ('9999', '9999', '999,99', '9999,999');
Dans la fonction "NumberIsValid",
déclaration :
-----------
Var Ok : Boolean;
L1, L2, E1, E2 : Byte; // L1, E1 : Le nbre de chiffre avant la virgule
// L2, E2 : Le nbre de chiffre après la virgule
// L pour Limite / E pour le TEdit
Chaine : String // Variable temporaire
Code,
remplacer :
---------
if Ok then Result := K;
par :
---
If Ok Then
If (TEdit(Sender).Tag > 0) And (K In ['0'..'9']) Then // Si TAG > 0 alors travailler avec
// LIMITE[?] => (1)
Begin
// On défini le masque de saisie
L1 := Pos(DecimalSeparator, Limite[TEdit(Sender).Tag]); // Position de la virgule
If L1 = 0 Then L1 := Length(Limite[TEdit(Sender).Tag]) // Si pas de virgule,
// alors nbre entier ...
Else Dec(L1); // ...Sinon, Pos-1 va
// donner le nbre de
// chiffre avant la virgule
L2 := Pos(DecimalSeparator, Limite[TEdit(Sender).Tag]); // Position de la virgule.
// Si = 0, pas de décimal
If L2 > 0 Then L2 := Length(Limite[TEdit(Sender).Tag]) - L2; // Si virgule, on calcul
// le nbre du chiffre
// après la virgule
// On défini à quoi ressemble la valeur entrée dans le TEdit
Chaine := TEdit(Sender).Text; // On stock le contenu du TEdit
Insert(K, Chaine, TEdit(Sender).SelStart+1); // On insert le nouveau caractère
E1 := Pos(DecimalSeparator, Chaine); // Idem que pour L
If E1 = 0 Then E1 := Length(Chaine)
Else Dec(E1);
If Chaine[1] = '-' Then Dec(E1); // Si le signe "-" est présent, on le
// supprime dans le décompte
E2 := Pos(DecimalSeparator, Chaine);
If E2 > 0 Then E2 := Length(Chaine) - E2;
// On teste si on est dans la limite
If (E1 <= L1) And (E2 <= L2) Then Result := K;
End
Else Result :K; // (1)> Sinon, on travaille sans limite
27 juin 2005 à 13:57
En plus que du talent à Delphi dédié,
Kenavo est poète... qui l'aurait supposé ?
L'écran de mon ordi en est tout en émoi.
La souris affolée ne sait plus où pointer.
Mes doigts sur le clavier, devenus malhabiles,
Des touches familières ont perdu le chemin.
Les seuls mots qui me viennent ne sont que du babil...
Que j'ai du mal, en plus, à bien faire rimer !
P-S: Ces pauvres vers minable, veuillez me pardonner ;o)
japee
27 juin 2005 à 13:55
Kenavo
"Un grand bravo à toi Japee, ce code est fabuleux."
Inekman
Bon, dès que je postule pour un emploi de programmeur, j'ajoute ça sur mon CV.
N'en jetez plus, les gars, ma modestie naturelle souffre terriblement. ;o)
Merci. :)
26 juin 2005 à 23:47
Un grand bravo à toi Japee, ce code est fabuleux.
Inekman.10/10
26 juin 2005 à 20:30
Je ne saurais soumettre ce code à pire torture que lui !
Au vu de nombreux posts que mes réponses ont fuit,
Nombreux, les Delphinautes à ce code diront : bis !
Et quand une question, mille fois se re-pose
Comme de la saisie d'un nombre ou d'une date
J'en suis sûr et voyez, jamais cela ne rate,
Sur Japee, sans problème, je crois et me repose !
Ken@vo
26 juin 2005 à 15:26
Etant donné ta ruse (à la limite de la perfidie) ;o), le fait que tu n'aies pas pu piéger mon code équivaut à un certificat de fiabilité...
J'accepte volontiers tes félicitations.
Ton expérience et ta rigueur dans l'art de la programmation en Delphi, bien connues des habitués de ce site, font qu'elles valent leur pesant de cacahuètes. :)
Hello, BMSOFT.
Je viens de jeter un coup d'oeil au composant que tu cites.
Il ne fait qu'admettre les chiffres, excluant les "-" (moins) et les "," (virgules), ce qui peut être génant pour la saisie de réels...
Mais on peut tout à fait inclure mon code dans ce composant, ou faire un composant en partant de mon code, ce qui revient au même étant donné l'extrême simplicité de mise en oeuvre...
Merci à vous deux pour l'intérêt que vous avez porté à mon code.
Bonne prog' dominicale ! :p
26 juin 2005 à 11:21
25 juin 2005 à 23:09
A conserver comme référence pour le prochain qui demandera comment faire pour...
Félicitations Japee.