FILTRER LA SAISIE VALIDE D'UN NOMBRE ENTIER, FLOTTANT, SIGNÉ OU NON, DANS UN TED

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 25 juin 2005 à 23:09
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/32310-filtrer-la-saisie-valide-d-un-nombre-entier-flottant-signe-ou-non-dans-un-tedit

EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
30 août 2005 à 18:55
Juste.
Faudrait poser la question dans le forum.
Pioko Messages postés 2 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 29 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és 58 Date d'inscription mercredi 16 février 2005 Statut Membre Derniè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és 2 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 29 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és 58 Date d'inscription mercredi 16 février 2005 Statut Membre Derniè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és 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
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és 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
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és 291 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 30 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és 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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és 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
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és 5 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 24 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és 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 33
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...

Félicitations Japee.
Rejoignez-nous