Aller au contenu

Messages recommandés

Posté(e)

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:defun

Dans 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)

Posté(e)

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
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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)

Posté(e)

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)

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é