bonjour,
je programme en utilisant les fonctions de l'api windows et je voudrais que l'utilisateur de mon application ne puisse entrer que des réels dans un edit que j'ai créé....
je galère,qq pourrait il m'aider?!!
bonjour,
je programme en utilisant les fonctions de l'api windows et je voudrais que l'utilisateur de mon application ne puisse entrer que des réels dans un edit que j'ai créé....
je galère,qq pourrait il m'aider?!!
c'est une question spécifique au développement Windows..
Donc il serait souhaitable de la poser dans le forum approprié.
pour gérer la saisie dans une Edit Box il faut filtrer les touches enfoncées , je ne vois que ce moyen là .
Lorsque l'utilisateur tape du texte dans une zone de texte , il ya un message ES_XXXXX qui est envoyé à la zone de texte ( voir MSDN) donc filtrer le ou les messages.
Sinon à la création de la zone de texte , spécifier le style ES_NUMBER( éventuellement avec SetWindowLong)
Voila comment faire(pas testé):
->tu créés un contrôle edit
->tu récupère la notification EN_UPDATE(envoyée pas WM_COMMAND)
et tu appèles une fonction qui récupère le dernier char entré regarde
s'il est bon, ne fait rien s'il cest ok, ou le supprime du texte et envoie
un "bip" si pqs ok
L'intérêt de EN_UPDATE est que cette notification est envoyé AVANT QUE LE EDIT SOIT DESSINER donc le texte est encore modifiable . Je sais que c'est de la bidouille mais bon.... Sinno il doit y avoir les contrôle perso mais je ne sais pas comment on fait !!!
![]()
Heu... en fait, je n'arrive pas trop à voir comment concrêtement appliquer tes conseils...
le ES_NUMBER ne peut pas convenir car je veux des entiers.
Si tu pouvais me préciser un petit peu Amaury pauli l'histoire du EN_UPDATE car je suis assez débutant....
merci d'avance.
PS: tu est clermontois?! moi aussi!!
on est bien chez nous!!![]()
je voulais dire, je veux des reels... donc pas de ES_NUMBER.
tu bosses avec quel compilo ?
(moi aussi chui à clermont, mais jveux rentrer à Rennes = Rhoazon)
Il faut subclasser ton controle, c.a.d fournir ta propre fonction de vérification de saisie.
![]()
en fait, j'ai essayé mais, je ne parviens pas à bien filtrer les caractères un par un pour les verifier tous...
j'ai essayé aussi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Edit_GetText(hCbHum,recup,30); for(int i=0;i<31;i++) { if (recup[i] != ' ' && recup[i] != '0' && recup[i] != '1' && recup[i] != '2' && recup[i] != '3' && recup[i] != '4' && recup[i] != '5' && recup[i] != '6' && recup[i] != '7' && recup[i] != '8' && recup[i] != '9' && recup[i] != '.') { res = 1; fprintf(fp,"la valeur de l'humidité doit être un réel\n"); recup[i] = ' '; } } Edit_SetText(hCbHum,recup);
et rien ne marche....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 conv = atof(recup); if (conv = 0) { res = 1; fprintf(fp,"la valeur entrée pour l'humidité n'est pas valide.\n"); fprintf(fp,"il faut entrer un reel, avec comme séparateur un point!\n"); }
[Balises [code] ajoutées par HW]
En subclassant ton controle tu peux choisir les caractères acceptés (chiffres + 1 seul '.' ou ',' en fonction de la locale...)
Le plus simple pour valider l'entrée est une expression régulière.
Sinon ton code se simplifie :
Pour le subclaasing :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if ( !isdigit( recup[i] ) && recup[i] != '.' )
http://msdn.microsoft.com/library/en-us/dnwui/html/msdn_subclas3.asp
j'ai trouvé la solution enfin!!!![]()
je vous la livre, si ça peux servir à d'autres :
merci encore à tous pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 for(int i=0;recup[i];i++) { if (recup[i] != '0' && recup[i] != '1' && recup[i] != '2' && recup[i] != '3' && recup[i] != '4' && recup[i] != '5' && recup[i] != '6' && recup[i] != '7' && recup[i] != '8' && recup[i] != '9' && recup[i] != '.') { res2 = 1; } else if (recup[i] == '.') { cpt++; } } if (res2==1 || cpt>1) { res = 1; fprintf(fp,"la valeur entrée pour l'humidité n'est pas valide.\n"); fprintf(fp,"il faut entrer un reel, \n"); fprintf(fp,"avec comme séparateur un point!\n"); }![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager