MiniMinus Posté(e) le 15 juin 2006 Posté(e) le 15 juin 2006 Bonjour à tous. Je suis nouveau aussi bien sur le site qu'en programmation Visual Lisp. Cela fait un mois que je me tape la lecture (en anglais) des documentations que j'ai pu trouvé. J'ai donc commencé à programmer doucement (sans rien créer de tangible mais cela viendra bien un jour ! Je ne désespère pas) et je n'arrive pas à récupérer les données entrées dans une boîte de dialogue. Comment faire ? Au secours ! J'ai les neurones qui partent en confiture (enfin les deux seules que j'avais). Merci à tous. MiniMinus
(gile) Posté(e) le 15 juin 2006 Posté(e) le 15 juin 2006 Salut et bienvenue, Peut-être devrait-tu préciser dans ta demande, les réponses n'en seront que moins vagues. Tu peux récupérer les données acquises par une boite de dialogue : avec get_tile : (setq x (get_tile "cle")) ou avec mode_tile (mode_tile "cle" "(setq x $value)") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MiniMinus Posté(e) le 15 juin 2006 Auteur Posté(e) le 15 juin 2006 Merci Gile Je n'en pouvais plus d'essayer toutes les syntaxes possibles. J'essaye de suite. Encore merci. Je trouve le site très sympa. MiniMinus
MiniMinus Posté(e) le 15 juin 2006 Auteur Posté(e) le 15 juin 2006 OK ! JE N'Y ARRIVE PAS !!! QUEL ANE JE SUIS !!!Voilà ce que j'ai essayé : Définition de la boîte de dialogue sauvegardée sous "Attache.dcl"Info_Attache : dialog { label = "Qualité des boulons"; key ="manu"; alignment = left; : column { : row { height = 3; label = "Platine d'assemblage"; : edit_box { label = "Ep. :"; key = "Epais"; } : spacer { width = 7; }[/surligneur] : edit_box { label = "Larg. :"; key = "Larg"; } : spacer { width = 7; } : edit_box { label = "Long. :"; key = "Long"; } } : column { height = 10; label = "Boulons"; : row { spacer_0; : column { Diametre; Qualite; spacer_0; } } } : button { key = "accept"; label = "OK"; is_default = true; fixed_width = true; alignment = centered; } }}Diametre : radio_row { label = "Diamètre :"; key = "DiaBls"; : radio_button { label = "ø10"; is_default = true; value = 1; } : radio_button { label = "ø12"; } : radio_button { label = "ø16"; } : radio_button { label = "ø20"; } : radio_button { label = "ø24"; } : radio_button { label = "ø27"; } }Qualite : radio_row { label = "Qualité :"; key = "QualBls"; : radio_button { label = "HM 4.6"; is_default = true; value = 1; } : radio_button { label = "HM 6.8"; } : radio_button { label = "HM 8.8"; } : radio_button { label = "HR 8.8"; } : radio_button { label = "HR 10.9"; } }[/i]et voici le petit programme sauvegardé sous "Hello.lsp" (que d'imagination"(defun C:Vasy( / dcl_id ) (setq dcl_id (load_dialog "Attache.dcl")) (if (not (new_dialog "Info_Attache" dcl_id)) (exit) ) (mode_tile "Epais" 0) (setq eppl (get_tile "Epais")) ;(action_tile "Epais" "((setq eppl (get_tile \"Epais\"))(princ eppl))") (princ "eppl =") (princ eppl) (princ "lapl =") (princ lapl) (start_dialog) (unload_dialog dcl_id) (princ)) ...et bien je n'arrive pas à imprimer les valeurs de "Epais" !!! Je dois être vraiment nul. Merci d'avance à celui qui pourra m'expliquer mon erreur MiniMinus
(gile) Posté(e) le 15 juin 2006 Posté(e) le 15 juin 2006 Juste en jetant un oeil, il manque un OK_Cancel à la fin du DCL Il manque aussi un done_dialog à la fin du LISP, à faire avant (start_dialog) et (unload_dialog dcl_id) exemple ("accept" est la clé par défaut de OK) : (action_tile "accept" (strcat "(progn" "(setq epll (get_tile \"epais\"))" "(princ \"eppl =\")" "(princ eppl)" "(done_dialog))" ) )(start_dialog)(unload_dialog dcl_id) Tu trouveras des exemples de petites boites de dialogues ici(princ) [Edité le 15/6/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 15 juin 2006 Posté(e) le 15 juin 2006 il manque un OK_Cancel à la fin du DCL Au temps pour moi, je n'avais pas vu le bouton OK :calim: Pour me faire pardonner ;) (defun C:Vasy( / dcl_id ) (setq dcl_id (load_dialog "Attache.dcl")) (if (not (new_dialog "Info_Attache" dcl_id)) (exit) ) (mode_tile "Epais" 0) (action_tile "accept" (strcat "(progn" "(setq eppl (get_tile \"Epais\"))" "(princ \"eppl =\")" "(princ eppl)" "(done_dialog))" ) ) (start_dialog) (unload_dialog dcl_id) (princ) ) Ou encore : (defun C:Vasy (/ dcl_id) (setq dcl_id (load_dialog "Attache.dcl")) (if (not (new_dialog "Info_Attache" dcl_id)) (exit) ) (mode_tile "Epais" 0) (action_tile "Epais" "(setq eppl $value)") (action_tile "accept" (strcat "(progn" "(princ \"eppl =\")" "(princ eppl)" "(done_dialog))" ) ) (start_dialog) (unload_dialog dcl_id) (princ) ) [Edité le 15/6/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MiniMinus Posté(e) le 16 juin 2006 Auteur Posté(e) le 16 juin 2006 Merci Gile pour les corrections. Cela me permet de comprendre un peu mieux la logique du langage. Cependant après avoir essayé tes versions, il apparait que la variable est toujours égale à "nil". Est-ce normal ? MiniMinus
(gile) Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Non ce n'est pas normal si tu as entré quelque chose dans la case "Ep:" Oui c'est normal si tu n'as rien entré, telle quelle la boite de dialogue permet de faire OK même si les cases (edit_box) sont vides, pour palier à çà tu peux attribuer une valeur par défaut à chaque case, en donnant une valeur à chaque variable dans le lisp ou en specifiant une "value" pour chaque case dans le DCL, dans ce cas il faut récupérer les valeurs à la fin, dans le (action_tile "accept") comme dans le premier exemple ci-dessus. Tu peux aussi laisser les case vide et "griser" OK (mode_tile "accept" 1) et dans les (action_tile ...) de chaque edit_box tester les valeurs des variables et "dégriser" OK si elle ont toutes une valeur : (if (and eppl lapl lopl) (mode_tile "accept" 0)) Sinon, en ce qui concerne la forme globale des LISP avec boite de dialogue, le plus souvent, je fais un (defun c: ...) qui ne fais qu'ouvrir la boite de dialogue, et récupérer les données pour les transmettre à une (ou des) autre fonction (defun ...) qui traite les données récupérées. Exemple : (defun C:Vasy (/ dcl_id eppl) (setq dcl_id (load_dialog "Attache.dcl")) (if (not (new_dialog "Info_Attache" dcl_id)) (exit) ) (setq eppl "2.0" lapl "30.0" lopl "250.0" ) (set_tile "Epais" eppl) (set_tile "Larg" lapl) (set_tile "Long" lopl) (action_tile "Epais" "(setq eppl $value)") (action_tile "Larg" "(setq lapl $value)") (action_tile "Long" "(setq lopl $value)") (action_tile "accept" "(progn (MaFonction eppl lapl lopl) (done_dialog))" ) (start_dialog) (unload_dialog dcl_id) (princ) ) (defun Mafonction (ep la lo) (princ (strcat "\nEpaisseur : " ep "\nLargeur : " la "\nLongueur : " lo ) ) (textscr) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
MiniMinus Posté(e) le 16 juin 2006 Auteur Posté(e) le 16 juin 2006 :cool: Un très grand merci Gile ! Cela marche mais j'ai du être plus modeste avec ma boîte de dialogue. J'ai retiré les radio_button. Mais comme j'ai les mêmes intentions que toi : seulement utiliser les boîtes de dialogues pour entrer des données, cela ne me gêne pas trop (il faut maintenant que j'apprenne à récupérer les réponses des radio_button et des popup_list !!!). Je ferais plusieurs boîtes de dialogue différentes, c'est tout. A ce propos, dois-je d'abord mettre toutes les lignes de mon programme puis ouvrir mes boîtes une à une ou mettre les lignes concernant la première boîte puis l'ouvrir, puis mettre les lignes pour la seconde puis l'ouvrir et ainsi de suite... En tous cas : UN GRAND MERCI (J'étais pas loin de tout envoyer sur les roses.) ^Boîte de dialogueInfo_Attache : dialog { label = "Test Edit_box"; alignment = left; : column { : edit_box { label = "Ep. :"; key = "Epais"; } : edit_box { label = "Larg. :"; key = "Larg"; } : button { key = "accept"; label = "OK"; fixed_width = true; alignment = centered; } : button { label = "Cancel"; is_cancel = true; is_default = true; key = "cancel"; width = 8; fixed_width = true; } }} Programme(defun C:Vasy (/ dcl_id eppl lapl ) (setq dcl_id (load_dialog "Attache2.dcl")) (if (not (new_dialog "Info_Attache" dcl_id)) (exit) ) (action_tile "Epais" "(setq eppl $value)") (action_tile "Larg" "(setq lapl $value)") (action_tile "accept" "(progn (MaFonction eppl lapl ) (done_dialog))" ) (start_dialog) (unload_dialog dcl_id) (princ)) (defun Mafonction ( ep la ) (princ (strcat "\nEpaisseur : " ep "\nLargeur : " la ) ) (textscr)) MiniMinus
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