Clément.a Posté(e) le 13 février 2013 Posté(e) le 13 février 2013 Bonjour à tous, J'ai une boite de dialogue, l'utilisateur dois rentré un nombre entier dans une "edit-box" et j'aimerais vérifier qu'il n'a pas fait autre chose!voici la définition de mon "edit_box" : :edit_box { key = "Nombre_place"; label="Nombre de place standard : "; value= ""; edit_width = 15; }et mon code Lisp pour tester cette valeur : (action_tile "Nombre_place" "(alert1)") (defun alert1 () (setq nbrplace (get_tile "Nombre_place")) (setq nbrplace (atoi nbrplace)) (cond (( zerop nbrplace) (alert "Entrer un nombre entier et différent de zéro !!") ) A partir de ce point mon code m'affiche bien le message d'erreur si c'est une chaine de caractère ou 0 mais pas si c'est un décimal. De plus après le message d'erreur j'aimerais éffacer le contenu qui ne correspond pas aux critères et que le curseur revienne dans cette "edit_box". je sais pas si c'est possible... Merci
GEGEMATIC Posté(e) le 13 février 2013 Posté(e) le 13 février 2013 Salut, ce genre de trucs alourdissent énormément un programme.Il te faut :1 : corriger les éventuelles erreurs de saisie: genre un espace devant le chiffre 1(dans l'exemple ci dessou, c'est le boulot de pw_comifo, qui est capable de corriger 0.01. en 0.01 par exemple ) 2 : tester si la valeur convient (dans mon ex, pw_est_reel) 3 : envoyer le message qui convient, pour cela tu a le composant "error" de ta dcl 4 : maintenir le focus sur la case de saisie (effacer, c'est brutal) en désactivant tous les composant dcl autre que celui qui pose pb (dasn mon ex pw_off_all_but_current) qui stock également leur état (actif / inactif) 5: quand l'utilisateur a rentré la bonne valeur, effacer error, et déverrouiller les bons composants: dans mon ex :(set_tile "error" "")(pw_restore_status) ;;exemple de gestion après la lecture d'une valeur dans un dcl : (setq val (pw_comifo val)) (set_tile (strcat "futu_" (itoa num)) val) (if (setq val (pw_est_reel val nil)) (progn (set_tile "error" "")(pw_restore_status) (setq ret val) ) (progn (pw_off_all_but_current (itoa num)) (set_tile "error" (pw_getxt 'PW27 "La valeur doit être un réel nom de dieu ! ")) (setq ret nil) ) ) ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Clément.a Posté(e) le 13 février 2013 Auteur Posté(e) le 13 février 2013 Merci pour cette réponse. Bon j'ai pas tout suivi mais ça m'aide à construire mes idées.J 'ai au moin appris qu'avec le "set_tile" je pouvais changer le "edit_box" de mon choix (plutôt coul!) Du coup j'ai quelque question : -bon j'aime bien le principe du "boulot de pw_comifo" et "pw_est_reel" mais comment je fais: - Avec la fonction "numberp" pour vérifier si c'est bien un nombre je dois convertir la chaine de caractère donc y a plus d'interer parcque --> (atoi "kjh") renvoie 0 et (atoi "lk54") renvoie 54 donc sa me mène à rien! - du coup j'ai aucune idée pour "pw_off_all_but_current" désactivé ok mais sauvgarder chépa! et j'ai peur que ce soit un peu lourds de tout désactivé et de sauvgarder tant que la valeur n'est pas juste et après de tout remetre, moi juste afficher une alert pour dire que c'est pas bon effacé ce qu'on avait mis dans edit box avec set_tile "" et replacer le curseur dans cette edit box comme ça il régénère obligatoirement le test puisque qu'il se lance avec action_tile de l'edit_box. j'attend pas une réponse avec un code tout fait qui répond à ce que je demande mais ce qui pourais contribuer à y arriver (je suis étudiant j'ai le temps de cherché et d'apprendre la preuve il est déja tard ^^)Merci beaucoup
Patrick_35 Posté(e) le 14 février 2013 Posté(e) le 14 février 2013 Salut Tu peux récuperer la valeur saisie dans ton edit_box et gérer le résultat en temps réel(action_tile "Nombre_place" "(verif_saisie $value)") Pour vérifier si ton nombre est un entier(defun verif_saisie(nb) (or (eq (type (read nb)) 'INT) (alert "Ce n'est pas un entier")) ) Un set_tile permet de forcer une valeur sur une clé (Nombre_place)Un mode_tile permet de forcer la sélection (Nombre_place). En gros, tant que ma valeur est inexacte, je reste sur mon edit_box. ps : ne pas oublier un done_dialog sur Enter ou Esc pour sortir de sa boite de dialogue. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Clément.a Posté(e) le 14 février 2013 Auteur Posté(e) le 14 février 2013 Réponse parfaite(juste les infos qui faut pour que je puisse avancer), c'est pile ce que je voulais faire. ça marche niquel! Merci à vous deux!Bonne Journée
Clément.a Posté(e) le 18 février 2013 Auteur Posté(e) le 18 février 2013 J'ai encore une petit question. J'ai plusieur edit box exemple :(action_tile "diametre" "(verif_saisie $value)") (action_tile "hauteur" "(verif_saisie $value)") (action_tile "volume" "(verif_saisie $value)") (action_tile "pente" "(verif_saisie $value)")qui renvoie donc tous à :(defun verif_saisie(nb) (or (eq (type (read nb)) 'REAL) (alert "Ce n'est pas un réel")) )à partir de la y à un moyen de savoir dans qu'elle edit_box on était, donc de connaitre sa clé?
Patrick_35 Posté(e) le 18 février 2013 Posté(e) le 18 février 2013 J'ai encore une petit question. J'ai plusieur edit box exemple :(action_tile "diametre" "(verif_saisie $value)") (action_tile "hauteur" "(verif_saisie $value)") (action_tile "volume" "(verif_saisie $value)") (action_tile "pente" "(verif_saisie $value)")qui renvoie donc tous à :(defun verif_saisie(nb) (or (eq (type (read nb)) 'REAL) (alert "Ce n'est pas un réel")) )à partir de la y à un moyen de savoir dans qu'elle edit_box on était, donc de connaitre sa clé?Oui, en ajoutant un argument à la fonctionPar exemple(action_tile "diametre" "(verif_saisie \"diamétre\" $value)")(defun verif_saisie(qui nb) (or (eq (type (read nb)) 'REAL) (alert (strcat "Dans " qui " ,ce n'est pas un réel"))) ) Ps : j'ai pris un str comme exemple, mais ça pourrait être un entier @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Clément.a Posté(e) le 18 février 2013 Auteur Posté(e) le 18 février 2013 Bien vu, je cherchais trop compliqué! Merci
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant