Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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é?

Posté(e)

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 fonction

Par 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité