DenisHen Posté(e) le 5 avril 2016 Posté(e) le 5 avril 2016 Bonjour à la communauté. Voilà, j'ai, dans une macro, inputbox de Patrick_35 :(defun inputbox (titre message defaut / *acad* users1) ; de Patrick_35 (setq *acad* (vlax-get-acad-object) users1 (getvar "users1") ) ;_ Fin:setq (acad-push-dbmod) (vla-eval *acad* (strcat "ThisDrawing.SetVariable \"USERS1\"," "InputBox (\"" message "\", \"" titre defaut "\")" ) ;_ Fin:strcat ;_ Fin:strcat ) ;_ Fin:vla-eval (setq valtxt (getvar "users1")) (setvar "users1" users1) (acad-pop-dbmod) ) ;_ Fin:defunDans mon code, je l'appel comme ça : (setq Operateur (inputbox "Choix de l'opérateur" "Initiales de l'opérateur (FB pour Fred et FZ pour François) :" "FZ")) (setq Operateur (strcat Operateur)) Mon problème est que ma variable Operateur revient avec une valeur T... Et je n'arrive pas à savoir ce que je fais mal... Si quelqu'un a une astuce ou un conseil, je suis preneur... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 5 avril 2016 Posté(e) le 5 avril 2016 Salut, Je ne peux pas tester parce que je n'ai pas installé le module VBA (et que je ne compte pas le faire).Mais à lire le code, je dirais que le résultat est stocké dans la variable (globale) valtxt. Si tu veux que la fonction retourne cette valeur, appelle la variable à la fin de la routine: (defun inputbox (titre message defaut / *acad* users1 valtxt) ; de Patrick_35 (setq *acad* (vlax-get-acad-object) users1 (getvar "users1") ) ;_ Fin:setq (acad-push-dbmod) (vla-eval *acad* (strcat "ThisDrawing.SetVariable \"USERS1\"," "InputBox (\"" message "\", \"" titre defaut "\")" ) ;_ Fin:strcat ;_ Fin:strcat ) ;_ Fin:vla-eval (setq valtxt (getvar "users1")) (setvar "users1" users1) (acad-pop-dbmod) valtxt ) ;_ Fin:defun Sinon, tu peux aussi utiliser la routine ci-dessous (qui n'a pas besoin du VBA) extraite de Dialog.lsp en bas de cette page. ;; InputBox (gile) ;; Ouvre une boite de dialogue pour récupérer une valeur ;; sous forme de chaine de caractère ;; ;; Arguments ;; tous les arguments sont de chaines de caractère (ou "") ;; box : titre de la boite de dialogue ;; msg : message d'invite ;; val : valeur par défaut ;; ;; Retour ;; une chaine ("" si annulation) (defun InputBox (box msg val / subr temp file dcl_id ret) ;; Retour chariot automatique à 50 caractères (defun subr (str / pos) (if (and (< 36 (strlen str)) (setq pos (vl-string-position 32 (substr str 1 36) nil T)) ) (strcat ":text_part{label=\"" (substr str 1 pos) "\";}" (subr (substr str (+ 2 pos))) ) (strcat ":text_part{label=\"" str "\";}") ) ) ;; Créer un fichier DCL temporaire (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") ret "" ) ;; Ecrire le fichier (write-line (strcat "InputBox:dialog{key=\"box\";initial_focus=\"val\";spacer;:paragraph{" (subr msg) "}spacer;:edit_box{key=\"val\";edit_width=36;allow_accept=true;}spacer;ok_cancel;}" ) file ) (close file) ;; Ouvrir la boite de dialogue (setq dcl_id (load_dialog temp)) (if (not (new_dialog "InputBox" dcl_id)) (exit) ) (set_tile "box" box) (set_tile "val" val) (action_tile "accept" "(setq ret (get_tile \"val\")) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) ;;Supprimer le fichier (vl-file-delete temp) ret ) 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 5 avril 2016 Auteur Posté(e) le 5 avril 2016 Bonjour (gile). Et un grand merci à toi... Ton dernier code fonctionne à merveille... Encore merci... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 5 avril 2016 Auteur Posté(e) le 5 avril 2016 J'ai même fais mieux ! ! ! J'ai lu Dialog.lsp et, comme ma saisie correspondait à une liste d'opérateurs, j'ai choisi d'utiliser ListBox... Et c'est encore mieux ! ! ! Par contre, ListBox n'est pas énuméré dans le liste des fonctions de Dialog.lsp dans la page de ton raccourcis... Un grand merci à (gile)... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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