Comment limiter le contenu d'un edit à des valeurs numérique [Résolu]

FIMO48 2 Messages postés mercredi 2 septembre 2009Date d'inscription 2 septembre 2009 Dernière intervention - 2 sept. 2009 à 10:13 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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
Afficher la suite 

13 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 2 sept. 2009 à 11:11
+1
Utile
Bonjour,

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


cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 2 sept. 2009 à 11:53
+1
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
FIMO48 2 Messages postés mercredi 2 septembre 2009Date d'inscription 2 septembre 2009 Dernière intervention - 2 sept. 2009 à 12:04
0
Utile
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 @+
Commenter la réponse de FIMO48
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 2 sept. 2009 à 14:53
0
Utile
merci de valider la réponse..

cantador
Commenter la réponse de cs_cantador
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 5 sept. 2009 à 19:55
0
Utile
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 }
Commenter la réponse de ni69
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 5 sept. 2009 à 22:21
0
Utile
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
Commenter la réponse de cs_cantador
MANNAI_Tarek 2 Messages postés mercredi 11 juin 2008Date d'inscription 23 mars 2012 Dernière intervention - 9 sept. 2009 à 22:26
0
Utile
choisir la propriété onkeypress et poser ce code :



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

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

@+
Nico { www.ni69.info }
Commenter la réponse de ni69
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 13 sept. 2009 à 02:21
0
Utile
@ 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 }
Commenter la réponse de ni69
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 13 sept. 2009 à 21:04
0
Utile
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
Commenter la réponse de cs_cantador
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 14 sept. 2009 à 00:27
0
Utile
@ 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 }
Commenter la réponse de ni69
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 14 sept. 2009 à 10:54
0
Utile
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
Commenter la réponse de cs_cantador

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.