Titifonky Posté(e) le 7 avril 2005 Posté(e) le 7 avril 2005 Bonjour,J'aimerais savoir si c'est possible de faire apparaître un menu contextuel de la même forme que celui qui apparait quand on fait Shift+clic droit au cours d'un programme lisp.En fait, je voudrais faire ce menu pour avoir une liste de choix à l'écran mais qui disparaisse après avoir fait la selection. J'ai recherché en DCL mais la boite de dialogue apparait toujours avec un titre. www.le-metal.net, sur la métallerie
BIM G CO Posté(e) le 7 avril 2005 Posté(e) le 7 avril 2005 Je crois que Serge a parlé récemment d'un menu contextuel mais c'est avec un fichier mnu ! fait une recherche + approfondi car je n'ai pas réussi à retrouver le post. Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
bonuscad Posté(e) le 7 avril 2005 Posté(e) le 7 avril 2005 Un exemple vaut mieux qu'un grand discours.C'est une manière simple de procéder! (defun c:menu_contextuel ( / key_w) (initget 1 "Abc Def Ghi Jkl Mno Pqr Stu Vwx Yz") (setq key_w (entsel "\nSélectioner une entité-Choisir une option [Abc/Def/Ghi/Jkl/Mno/Pqr/Stu/Vwx/Yz]: ")) (cond ((eq key_w "Abc") (alert "Abc")) ((eq key_w "Def") (alert "Def")) ((eq key_w "Ghi") (alert "Ghi")) ((eq key_w "Jkl") (alert "Jkl")) ((eq key_w "Mno") (alert "Mno")) ((eq key_w "Pqr") (alert "Pqr")) ((eq key_w "Stu") (alert "Stu")) ((eq key_w "Vwx") (alert "Vwx")) ((eq key_w "Yz") (alert "Yz")) (T (if (eq (type (car key_w)) 'ENAME) (alert (cdr (assoc 0 (entget (car key_w))))) (alert "Selection vide") ) ) ) (prin1) ) Fonction honorant les mots-clé (sauf getstring)getintgetreal getdistgetangle getorientgetpointgetcornergetkwordentselnentselnentselp Voir l'aide sur (initget) Armer les bits de controle et initialiser les mots-clé entre guillemet dans la fonction initget.Si l'on veut internationaliser le code donner les mots en francais puis en Anglaisex: (initget bit_control "CAlque COuleur Epaisseur _Layer Color Width")dans ce cas les options retournées seront en Anglais faire le test avec ce mot SANS underscore.Notez que seule la 1ere option en Anglais comporte le "_" (underscore) dans initget Dans les fonctions (get?????) ou (?entsel?) le message fourni doit comporter entre [] (crochets) toutes les options séparées par un / (slash)Si la cette syntaxe est bien respecté les options apparaitront dans le menu contextuel (Click-Droit) et pourront être sélectionnées. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Titifonky Posté(e) le 8 avril 2005 Auteur Posté(e) le 8 avril 2005 Merci Bonuscad pour ce prog mais je ne parlais pas de ce type de menu contextuel, en fait je parle d'un menu qui apparait au bout du pointeur de type menu acrochage au objet [shift + click droit] mais qui sois appelé par un programme Lisp. Je connais la fonction "menucmd" mais elle ne permet pas de faire un menu modifiable. Je voudrais pouvoir obtenir au cours de mon programme un menu de ce type qui apparait pour pouvoir selectionner un calque mais comme le nom et le nombre de calque change au cours du dessin ce menu doit être modifiable. Si quelqu'un a une idée, peut-être faut-il programmer en Vba. www.le-metal.net, sur la métallerie
Titifonky Posté(e) le 11 avril 2005 Auteur Posté(e) le 11 avril 2005 J'ai recherché dans l'aide AutoCAD et j'ai pu trouver quelques informationsVoici la syntaxe d'un menu popup à inserer dans le fichier AutoCAD.mns et AutoCAD.mnu.Il est possible de stocker des info dans les variables users1-5 puis de les recuperer avec du langage Diesel.Le menu suivant permet de rendre un calque actif suite à l'appele dans un programme LISPpar(menucmd "POP25=PERSO") -> charge le menu(menucmd "POP25=*) -> fait apparaitre le menu ***POP25 **PERSO [Menu Perso] ID_Users1 [$(if,$(eq,$(getvar,users1),""),~,$(eval,$(getvar,users1)))]^P(setvar "clayer" (getvar "users1"))^P; ID_Users2 [$(if,$(eq,$(getvar,users2),""),~,$(eval,$(getvar,users2)))]^P(setvar "clayer" (getvar "users2"))^P; ID_Users3 [$(if,$(eq,$(getvar,users3),""),~,$(eval,$(getvar,users3)))]^P(setvar "clayer" (getvar "users3"))^P; ID_Users4 [$(if,$(eq,$(getvar,users4),""),~,$(eval,$(getvar,users4)))]^P(setvar "clayer" (getvar "users4"))^P; ID_Users5 [$(if,$(eq,$(getvar,users5),""),~,$(eval,$(getvar,users5)))]^P(setvar "clayer" (getvar "users5"))^P; Cela permet de rendre un programme plus interactif www.le-metal.net, sur la métallerie
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