Comment limiter le contenu d'un edit à des valeurs numérique

Résolu
FIMO48 Messages postés 2 Date d'inscription mercredi 2 septembre 2009 Statut Membre Dernière intervention 2 septembre 2009 - 2 sept. 2009 à 10:13
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 14 sept. 2009 à 10:54
je desirerais créer un edit qui n'accepte que les touches: de 0 à 9, -, delete et backspace

quelqu'un a la solution

merci d'avance

13 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
2 sept. 2009 à 11:11
Bonjour,

cherche un peu sur le site, cette question a été posée
un nombre incalculable de fois...


cantador
1
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
2 sept. 2009 à 11:53
pas encore trouvé...ohhhh!!!

tiens la voilà :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in #8,'0'..'9',DecimalSeparator,'+','-') then key:=#0;
end;



cantador
1
FIMO48 Messages postés 2 Date d'inscription mercredi 2 septembre 2009 Statut Membre Dernière intervention 2 septembre 2009
2 sept. 2009 à 12:04
Merci beaucoup

en effet j'ai chercher un peu sur le site mais j'avais trouver un bout code dans lequel le moins etait pas compris et j'ai essayé de l'ajouter mais sans succès

merci encore @+
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
2 sept. 2009 à 14:53
merci de valider la réponse..

cantador
0

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

Posez votre question
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
5 sept. 2009 à 19:55
Attention


Il faut toujours VALIDER au maximum toute entrée faite par un utilisateur (ici dans un TEdit), et ce, également en dehors de l'interface ! Sinon, erreurs garanties lors de l'exécution, avec de possibles désagréments... Ne surtout pas se dire que le code donné ci-dessus suffit en guise de protection contre les autres caractères, car même si c'est un guide appréciable pour l'utilisateur, cette pseudo-validation possède des faiblesses : On peut en effet insérer n'importe quel caractère dans le Edit, si l'on fait un copier/coller...

@+
Nico { www.ni69.info }
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
5 sept. 2009 à 22:21
oui ni69..

bien qu'on s'écarte un peu de la question, je renvoie à des sources sur le site qui ont déjà traitées ce sujet concernant le copier/coller.


cantador
0
MANNAI_Tarek Messages postés 2 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 23 mars 2012
9 sept. 2009 à 22:26
choisir la propriété onkeypress et poser ce code :



if not (key in #8,'0'..'9',DecimalSeparator,'+','-') then key:=#0;
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 sept. 2009 à 23:07
@marhouma:
Qu'est-ce que ta réponse apporte de plus à ce que cantador et moi-même avons écrit ??

@+
Nico { www.ni69.info }
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
10 sept. 2009 à 00:03
La seule solution propre est de revalider les données au début de leur exploitation dans le programme.

@+
Nico { www.ni69.info }
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
13 sept. 2009 à 02:21
@ VoicedMirror : D'accord pour le test sur le OnChange en ce qui concerne la validation côté interface !

Comme tu le dis, si rien n'est présent pour suspendre l'événement lors de la modification du contenu dans l'événement "OnChange" lui-même, on aura en effet une boucle ! Mais en pratique, celle-ci se limitera à deux itérations, car la première aura pour effet de modifier la valeur incorrecte en une valeur acceptable, et la deuxième n'entrainera plus d'autre modification (la valeur étant alors correcte)

Cependant, pour rendre le code plus propre (et moins soumis à d'éventuels impondérables dus à des effets de bord), il est préférable d'employer un flag caractérisant l'état d'édition par l'événement :

var
  EditFlag : Boolean = false;
 
procedure TForm1.EditChange(Sender: TObject);
begin
  if EditFlag then exit else EditFlag := true;

  Edit.Text := '...';

  EditFlag := false;
end;




@+
Nico { www.ni69.info }
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 sept. 2009 à 21:04
car la première aura pour effet de modifier la valeur incorrecte en une valeur acceptable

hou hou..diable l'utilisateur n'aura même plus à s'accuper de sa saisie..


cantador
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
14 sept. 2009 à 00:27
@ cantador : Qui dit valeur "acceptable", ne dit pas forcément valeur "désirée" ! Il s'agit simplement de remplacer toute valeur ne respectant pas le masque par celle - acceptable - se rapprochant le plus de l'entrée, et en aucun cas de deviner la volonté de l'utilisateur !


@+
Nico { www.ni69.info }
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
14 sept. 2009 à 10:54
très dangereux car si cette action se fait en quelques millièmes de secondes, l'utilisateur pourrait du coup valider une information "valable" mais qui en fait ne correspond pas à sa volonté première.

bon je reviens un peu en arrière..
la solution à mon sens la plus simple est soit
- d'empêcher le copier/coller (radicale)
- soit de faire une saisie en décalée
(cela rejoint ta proposition consistant à tester la donnée avant sa validation mais sans suggestion possible)
et en cas d'erreur afficher un message..


cantador
0
Rejoignez-nous