Aller au contenu

Comment lié un lisp à 1 boite de dialogue?


Messages recommandés

Posté(e)

Bonjour a tous,

je ne sais pas koment lié un lisp à ma boite de diaolgue (dcl) joint ci dessous:

je ne trouve pas, ou ne cherche pas o bon endroit ?

merci d'avance pour vos réponse.

 

[surligneur] QtxL : dialog {

value = "Quantité lisses";

key = "title";

 

:row {

: boxed_column {

label="Sélection lignes: ";

 

: edit_box {

label = "Lisse d'assises: ";

key = "assises";

fixed_width = true;

}

:button{

label="Choix des objets";

key="accept assises";

 

}

: edit_box {

label = "Lisse courantes: ";

key = "courantes";

fixed_width = true;

}

:button{

label="Choix des objets";

key="accept courantes";

 

}

: edit_box {

label = "Pinces: ";

key = "Pinces";

fixed_width = true;

}

:button{

label="Choix des objets";

key="accept Pinces";

 

}

}//fin box column

 

:spacer{

width=0;

}

 

: column{

 

: boxed_column{

label = "Fichier";

key = "Fichbc";

:button {

label = "Fichier de sortie";

key = "out";

width=10;

}

 

: toggle {

label = "Création du fichier de sortie ";

key = "sof";

}

}//fin box column fichier

}}

 

:row{

:spacer{

width=3;

}

 

cancel_button;

 

:spacer{

width=3;

}

}//fin row du bas

 

}

 

RESULTAT_calcul : dialog { label = "RESULTAT";

: edit_box { key = "SOMME";

edit_width = 70;

}

ok_button;

}[/surligneur]

Avant de savoir courir if faut savoir marcher

Posté(e)

Raaah les joies du lisp + dcl...

regarde donc par ici, je recherche d'autres posts qui pourraient t'intéresser..

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)
je ne sais pas koment lié un lisp à ma boite de diaolgue (dcl) joint ci dessous:

Voici le lisp de début pour ton dcl.

(defun c:qtxl ()
 (setq dcl_id (load_dialog "Qtxl.dcl"));;trouve le fichier de la boite de dialogue
 (setq what_next 2);;témoin de boucle
 (while (>= what_next 2);;boucle tant que what_next est sup à 2
   (if (not (new_dialog "QtxL" dcl_id));;;si pas de boite dialogue dans le fichier
     (exit)
   ) 
   ;;;
   ;;;ici tu mets les controles de tes boutons. key = nom de ton bouton
   ;;; 
   (setq what_next (start_dialog));;;debut des conditions
   (cond 
     ((= what_next 0);;;si bouton annuler
       (prompt "\nFONCTION ANNULEE")
     )
   )
 )
 (unload_dialog dcl_id);;;décharger la boite de dialogue
 (princ)
)

 

Le plus gros du travail est le controle de tous tes boutons.

Mais là je te laisse bidouiller un peu :)

 

EDIT : Je crois que le post cité plus haut contient largement le compte d'infos nécessaires

 

[Edité le 9/7/2008 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut,

 

Un tutorial bien fait ici, mais en anglais.

En anglais toulours, l'Aide aux développeurs > AutoLISP Developer's Guide > Working with Programmable Dialog Boxes.

 

Sinon, les fonctions incontournables

 

chargement et initialisation

- load_dialog : charger le fichier dcl, retourne un entier qui sert d'argument à la fonction suivante.

- new_dialog : initialiser la boite de dialogue définie dans le fichier.

 

affectations et actions

- set_tile : attribuer des valeurs aux éléments de la BD

- action_tile : affecter des actions aux différents éléments de la BD

- done_dialog : liée à certains action_tile cette fonction permet de fermer la BD

 

lancement et fermeture

- start_dialog : lancer la BD

- unload_dialog : décharger la BD

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

Posté(e)

Ton problème c'est le "dialogue" entre ton DCL et ton LISP ? C'est normal c'est toujours dur au début :cool:

 

Gile t'as mis sur une bonne voie en te donnant les commandes les plus utilisées en lisp+dcl !

 

1- Respecter la casse des "key" dans ton lisp.

 

2- key = nom de ton control dans le DCL = pareil dans ton lisp.

 

3-

action_tile : affecter des actions aux différents éléments de la BD

Très important : traduction "Si l'utilisateur clique sur ce bouton, fais ceci"

Exemple :

(action_tile "Annuler" "(done_dialog 5)")

(action_tile "Zoome" [b]"[/b](command \"zoom\" \"e\")[b]"[/b])

Attention toutes les actions sont entre parenthèses !

 

4-

done_dialog : liée à certains action_tile cette fonction permet de fermer la BD

 

5- Insérer une liste définie, dans une popup_list

Soit tu la fais directement dans le dcl

:popup_list {label = "Justification: " ; [b]list = "Gauche\nCentre\nDroite"[/b] ; value = "0" ; key  = "Incmtjust" ; }

soit tu le fais dans le lisp (ce qui est un peu plus compliqué...)

Dans le dcl on ne voit aucune liste apparaître :

:popup_list {key = "calques";label="Calques";}

Dans le lisp, il te faut créer une liste des calques existants

(setq lst (cons (cdr (assoc 2 (setq a (tblnext "layer" T)))) lst))
   (while (setq a (tblnext "layer"))
       (setq lst (cons (cdr (assoc 2 a)) lst))
   )
   (setq lst (acad_strlsort lst))

Ensuite intégrer la liste dans la popup_list

(start_list "calques")(mapcar 'add_list lst)(end_list)

Enfin lorsque tu te serviras de ta liste pour choisir un calque, ton résultat sera sous forme d'index de liste (0 ou 1 ou 2, etc). Pour retrouver le nom du calque choisi, il te faudra le retrouver à partir de son index !

(action_tile "calques" "(setq resultat (nth (atoi $value) lst))" )

 

6- Tu l'auras ptet remarqué, mais $value retourne le résultat de l'action dans la boite de dialogue.

 

Voilà, bon courage !!

"Chacun compte pour un, et nul ne compte pour plus d'un."

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é