Clément.a Posté(e) le 14 février 2013 Posté(e) le 14 février 2013 Bonjour à tous, J'ai déja aperçu plusieur fois qu'il était possible de créer une Boite de dialogue (un fichier *.DCL) depuis une routine Lisp. J'aurais besoin de savoir comment fait on pour ça, j'ai déja cheché sur le forum mais sans réponse bien clair (J'ai peut être loupé LA réponse j'ai vu ça mais j'ai pas vraiment tout suivi (que des ptits bout...) ) Voila ce que j'aimerais savoir faire depuis ma routine Lisp: - par qu'elle moyen créer-t-on la fichier *.DCL - Y à t'il un moyen particulier pour l'éditer (j'ai aperçus un truk du genre "write-lin"...)comment fonctionne t'il (--> ce moyen) - y à t'il une façon particulière pour chaque élément de les editer (genre edit_box, bouton) ou alors c'est le même format pour chaque qu'on remplace ensuite par les bon mot-code (key label etc). Voilou, qu'elle sont les fonctions et bout de codes pour pouvoir savoir faire ça? Merci pour vos réponses.
Patrick_35 Posté(e) le 15 février 2013 Posté(e) le 15 février 2013 Salut Je procède de cette manière en créant un fichier temporaire. (setq fic (vl-filename-mktemp "exl" nil ".dcl") fil (open fic "w") dwg (getenv "Patrick_35_Gabarit_Exl") gab (getenv "Patrick_35_Bouton_Gabarit") ) (or gab (setq gab "0")) (foreach txt '( "exl : dialog {" " key = \"titre\";" " alignment = centered;" " is_cancel = true;" " allow_accept = true;" " width = 50;" " : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}" " spacer;" " : boxed_row {" " label = \"Gabarit\";" " : toggle {key = \"gab\";}" " : text {key = \"txt\"; width = 40;}" " : button {label = \"...\"; key = \"par\"; width = 2;}" " }" " spacer;" " ok_cancel;" "}" ) (write-line txt fil) ) (close fil) (setq dcl (load_dialog fic)) (new_dialog "exl" dcl "") (set_tile "titre" titre) (set_tile "gab" gab) (bascule) (and dwg (affiche_txt dwg)) (start_list "sel") (mapcar 'add_list lst) (end_list) (action_tile "sel" "(setq val $value)") (action_tile "gab" "(setq gab $value)(bascule)") (action_tile "par" "(parcourir)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq res (start_dialog)) (unload_dialog dcl) (vl-file-delete fic) (and dwg (setenv "Patrick_35_Gabarit_Exl" dwg)) (and gab (setenv "Patrick_35_Bouton_Gabarit" gab)) (list res val) ) Pour te simplifier la tâche, tu mets le texte de ton DCL dans une liste.Si tu regardes bien dans le détail, tu retrouves ton fichier DCLIl faut faire attention aux guillemets et pour dire au lisp qu'il faut les écrire, tu utilises le signe \ pour indiquer que c'est un caractère spécial.Une bouche foreach pour écrire le DCL temporaire. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 15 février 2013 Posté(e) le 15 février 2013 Salut, Tu peux t'inspirer des codes contenus dans Dialog.lsp sur cette page. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Clément.a Posté(e) le 17 février 2013 Auteur Posté(e) le 17 février 2013 Merci pour vos réponse c'est bon j'ai réussi à faire des essais simple et ça marche. En revanche j'ai un petit souci j'aimerai dans la liste du "foreach" :(foreach txt '( "exl : dialog {" " key = \"titre\";" " alignment = centered;" " is_cancel = true;" " allow_accept = true;" " width = 50;" " : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}" " spacer;" " : boxed_row {" " label = \"Gabarit\";" " : toggle {key = \"gab\";}" " : text {key = \"txt\"; width = 40;}" " : button {label = \"...\"; key = \"par\"; width = 2;}" " }" " spacer;" " ok_cancel;" "}" ) (write-line txt fil) )Metre une variable genre comme ça (foreach txt '( "exl : dialog {" key_txt " alignment = centered;" " is_cancel = true;" " allow_accept = true;" " width = 50;" " : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}" " spacer;" " : boxed_row {" " label = \"Gabarit\";" " : toggle {key = \"gab\";}" " : text {key = \"txt\"; width = 40;}" " : button {label = \"...\"; key = \"par\"; width = 2;}" " }" " spacer;" " ok_cancel;" "}" ) (write-line txt fil) ) avec key_txt : (setq n_i "3")) (setq key_txt (strcat" key = \"Position " n_i "\";"))j'ai essayé mais j'ai pas trouvé mieux que de le faire séparément de la listedonc de réécrire un write-line de cette façon :(write-line key_txt fil) ce qui ne m'arrange pas trop par la suite. Donc si je pourai le metre directement dans la liste ça serait "magique" Merci beaucoup.
philsogood Posté(e) le 18 février 2013 Posté(e) le 18 février 2013 Hello Clement,Je ne peux aps t'apporter de solution pour ton pronlème mais concerant le fonctionnement des boites DCL j'ai trouvé ce site :http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm (en anglais dans le texte)@+Phil Projeteur Revit Indépendant - traitement des eaux/CVC
Patrick_35 Posté(e) le 18 février 2013 Posté(e) le 18 février 2013 Salut Pour le foreach, il te faut une liste.Tu peux en utiliser plusieurs ou faire de cette manière(append '("1" "2" "3") (list "4") '("5" "6" "7" "8")) ps : "4" peut-être remplacé par une variable @+ 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 Ah merci, ça va beaucoup m'aider, c'est juste ce qui me faut. J'ai pas encore essayé mais ça va le faire. Merci encore. @+
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