Aller au contenu

Comment faire des fenêtre de dialogues (DCL) ?


Messages recommandés

Posté(e)

Bonsoir à tous,

 

Je cherche comment peut-on créer des fenêtres pour du code Lisp ? ?

 

Merci d'avance...

 

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)

Avec l'aide

Voici un exemple simple

Fichier MIM.DCL

// ===================================================
//
//  MIM.DCL V1.00
//
//  Copyright (C) Patrick_35
//
// ===================================================

mim : dialog {
 key = "titre";
 fixed_width = true;
 alignment = centered;
 is_cancel = true;
 width = 60;
 : popup_list {label= "Origine"; key = "mim";}
 spacer;
 : list_box {label= "Destination" ; key="dest"; height = 10; multiple_select=true;}
 spacer;
 ok_cancel;
}

Et le fichier MIM.LSP

;;;===================================================
;;;
;;; MIM.LSP V1.00
;;;
;;; Changer l'imprimante des Présentations
;;;
;;; Copyright (C) Patrick_35
;;;
;;;===================================================

(defun c:mim(/ s)

 ;;;---------------------------------------------------------------
 ;;;
 ;;; Gestion des erreurs
 ;;;
 ;;;---------------------------------------------------------------

 (defun *errmim* (msg)
   (if (/= msg "Function cancelled")
     (if (= msg "quit / exit abort")
       (princ)
       (princ (strcat "\nErreur : " msg))
     )
     (princ)
   )
   (setq *error* s)
   (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
   (princ)
 )

 ;;;---------------------------------------------------------------
 ;;;
 ;;; Routine principale
 ;;;
 ;;;---------------------------------------------------------------

 (defun multiplie_pre(/ config doc init_mim liste_lay n position positiondests resultat tra)

   (setq init_mim (load_dialog (findfile "mim.dcl")))
   (setq liste_lay (layoutlist) n 0 position "0" positiondest "0" doc (vla-get-activedocument (vlax-get-acad-object)))
   (setq tra (vlax-safearray->list (vlax-variant-value (vla-getplotdevicenames (vla-get-layout (vla-get-modelspace doc))))))
   (if (vl-position "Aucun" tra)
     (setq tra (vl-remove "Aucun" tra))
   )
   (if (vl-position "Model" liste_lay)
     (setq liste_lay (vl-remove "Model" liste_lay))
   )
   (new_dialog "mim" init_mim "")
   (start_list "mim")
   (mapcar 'add_list tra)
   (end_list)
   (start_list "dest")
   (mapcar 'add_list liste_lay)
   (end_list)
   (set_tile "titre" "Sélection Imprimante V1.00")
   (set_tile "mim" position)
   (mode_tile "mim" 2)
   (while (and (/= resultat 1)(/= resultat 0))
     (action_tile "mim"    "(setq position $value)")
     (action_tile "dest"   "(setq positiondest $value)")
     (action_tile "accept" "(done_dialog 1)")
     (action_tile "cancel" "(done_dialog 0)")
     (setq resultat (start_dialog))
   )
   (unload_dialog init_mim)
   (if (eq resultat 1)
     (while (not (eq positiondest ""))
       (setq n (read positiondest))
       (vlax-for lay (vla-get-layouts doc)
         (if (eq (nth n liste_lay) (vla-get-name lay))
           (progn
             (vla-put-ConfigName lay (nth (atoi position) tra))
             (princ (strcat "\nPrésentation " (vla-get-name lay) " Configurée avec " (nth (atoi position) tra)))
           )
         )
       )
       (setq positiondest (substr positiondest (+ 2 (strlen (itoa n))) (strlen positiondest)))
     )
   )
 )

 ;;;---------------------------------------------------------------
 ;;;
 ;;; Routine de lancement
 ;;;
 ;;;---------------------------------------------------------------

 (vl-load-com)
 (setq s *error*)
 (setq *error* *errmim*)
 (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
 (multiplie_pre)
 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
 (setq *error* s)
 (princ)
)

(princ "\nMIM.LSP chargé. Tapez MIM pour l'exécuter")
(princ)

 

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Tu vas devoir apprendre un autre langage, le DCL, et comprendre les interactions entre LISP et DCL (c'est parfois fastidieux).

 

Tu peux voir quelques exemples simples dans ce sujet ou celui-là

 

Il existe aussi un utilitaire (payant) ObjectDCL qui marche, paraît-il fort bien (pas encore essayé), fais une recherche dans les forums.

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

Posté(e)

Bonjour à tous,

 

Payant ? Je l'ai téléchargé (site officiel )hier et installé, il ne m'a rien demandé et ne m'indique nulpart qu'il faut payer ou que c'est une démo, peut-être une version libre ou light...

 

Forum très instructif...

 

Merci

 

 

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é