Morgul Posté(e) le 2 novembre 2007 Posté(e) le 2 novembre 2007 Bonjour à tous, Je souhaite remplir une list_box sur plusieurs lignes.Mais je ne sais pas comment ? J'aimerai y insérer une liste de plans et ensuite faire une sélection dans la boite de dialogue pour faire un traitement par la suite. Avez-vous des exemples ? Merci d'avance. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
(gile) Posté(e) le 2 novembre 2007 Posté(e) le 2 novembre 2007 Salut, Regarde le petit LISP GetName (dans ce message), il contient une list_box. Dans le DCL : :list_box{key="pop";width=25;} Dans le LISP, pour remplir la liste (lst) : (start_list "pop")(mapcar 'add_list lst)(end_list) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Morgul Posté(e) le 3 novembre 2007 Auteur Posté(e) le 3 novembre 2007 Merci encore Gile pour ta réactivité. Je regarde ça et je te dirais si ça fonctionne. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Morgul Posté(e) le 3 novembre 2007 Auteur Posté(e) le 3 novembre 2007 Excuse-moi Gile mais c'est pas super claire pour moi... En fait ça marche pas comme je l'ai interprété.Je te donne donc plus de données. Je souhaite faire une boite de dialogue pour imprimer une liste de plans. J'ai déjà une liste qui se nomme : latt400Elle contient : (("09 - 1/1" "SYNOPTIQUE DES AERIENS") ("08 - 1/1" "PLAN ENERGIE UNIFILAIRE") ("07 - 1/1" "PLAN DES RESEAUX") ("06 - 1/1" "PLAN DU LOCAL TECHNIQUE") ("05 - 1/1" "PLAN D'ELEVATION PROJETE") ("04 - 1/1" "PLAN D'ELEVATION EXISTANT") ("03 - 1/1" "PLAN DE MASSE PROJETE")) Et j'ai une DCL qui contient : : list_box {key = "present"; height = 20; width = 20; multiple_select = true;} Le tout est de mettre "latt400" dans "present" et ensuite une exploitation de la liste sera effectuée pour imprimer les éléments sélectionnés Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
(gile) Posté(e) le 3 novembre 2007 Posté(e) le 3 novembre 2007 Salut, Je pense qu'il faut tout d'abord remanier ta liste avant de la passer à add_list.La liste doit être une liste de chaînes, en l'état, la tienne esr une liste de listes de chaînes. Donc, soit tu ne gardes que le deuxième élément de chaque sous liste : (start_list "present")(mapcar '(lambda (x) (add_list (cadr x))) latt400)(end_list) soit tu concatènes les deux éléments (avec un espace entre, par exemple) : (start_list "present")(mapcar '(lambda (x) (add_list (strcat (car x) " " (cadr x)))) latt400)(end_list) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Morgul Posté(e) le 3 novembre 2007 Auteur Posté(e) le 3 novembre 2007 Une fois de plus tu as raison. C'est nickel, il faut juste que je trouve le moyen de remettre à zéro la liste car à chaque fois que je relance le lisp ça s'aditionne. Mais ça ne doit pas être compliqué. Par contre plus dure maintenant,Comment fait-on pour exploiter les sélections que je fais dans la liste qui s'affiche dans la DCL ?En effet, je choisi dans la liste les plans que je souhaite imprimer, il faut donc un "action_tile" non ? Merci pour ton aide c'est super sympa. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
(gile) Posté(e) le 3 novembre 2007 Posté(e) le 3 novembre 2007 Après avoir sélectionné plusieurs présentations dans la liste, un (get-tile "présent") retourne une chaîne contenant les index des éléments de la liste séparés par des espaces (ex : "0 2 3" pour les premier, troisième et quatrième éléments) La routine str2lst permet de transformer cette chaîne en liste : (str2lst "0 2 3" " ") -> ("0" "2" "3") et donc de récupérer les élément concernés dans la liste. Un petit exemple, le fichier DCL est créé temporairement, puis supprimé. (defun test (/ latt400 tmp file dcl_id ret) (setq latt400 '(("09 - 1/1" "SYNOPTIQUE DES AERIENS") ("08 - 1/1" "PLAN ENERGIE UNIFILAIRE") ("07 - 1/1" "PLAN DES RESEAUX") ("06 - 1/1" "PLAN DU LOCAL TECHNIQUE") ("05 - 1/1" "PLAN D'ELEVATION PROJETE") ("04 - 1/1" "PLAN D'ELEVATION EXISTANT") ("03 - 1/1" "PLAN DE MASSE PROJETE") ) ) ;; créer un DCL temporaire (setq tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line "test:dialog{label=Test; :list_box{key =\"present\"; height=20;width=30; multiple_select=true;} ok_cancel;}" file ) (close file) ;; charger de la boite de dialogue (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "test" dcl_id)) (exit) ) ;; remplir la liste (start_list "present") (mapcar '(lambda (x) (add_list (cadr x))) latt400) (end_list) ;; recupérer les index des présentations sélectionnées (action_tile "accept" "(setq ret (get_tile \"present\")) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) ;; supprimer le fichier temporaire (vl-file-delete tmp) ;; reconstituer la liste des présentations sélectionnées (mapcar (function (lambda (x) (nth (atoi x) latt400))) (str2lst ret " ") ) ) ;; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3) (defun str2lst (str sep / pos) (if (setq pos (vl-string-position (ascii sep) str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) [Edité le 3/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Morgul Posté(e) le 4 novembre 2007 Auteur Posté(e) le 4 novembre 2007 Super cool, Merci de ton aide.J'aime bien ton système de DCL temporaire, j'avais pensé le faire me tu m'as devancé. Je vais tester tout ça.A+. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
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