Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous.

 

Je suis nouveau aussi bien sur le site qu'en programmation Visual Lisp. Cela fait un mois que je me tape la lecture (en anglais) des documentations que j'ai pu trouvé. J'ai donc commencé à programmer doucement (sans rien créer de tangible mais cela viendra bien un jour ! Je ne désespère pas) et je n'arrive pas à récupérer les données entrées dans une boîte de dialogue.

 

Comment faire ? Au secours ! J'ai les neurones qui partent en confiture (enfin les deux seules que j'avais).

 

Merci à tous.

 

MiniMinus

Posté(e)

Salut et bienvenue,

 

Peut-être devrait-tu préciser dans ta demande, les réponses n'en seront que moins vagues.

 

Tu peux récupérer les données acquises par une boite de dialogue :

 

avec get_tile :

 

(setq x (get_tile "cle"))

 

ou avec mode_tile

 

(mode_tile "cle" "(setq x $value)")

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

Posté(e)

OK ! JE N'Y ARRIVE PAS !!! QUEL ANE JE SUIS !!!

Voilà ce que j'ai essayé :

 

Définition de la boîte de dialogue sauvegardée sous "Attache.dcl"

Info_Attache : dialog {

label = "Qualité des boulons";

key ="manu";

alignment = left;

: column {

: row {

height = 3;

label = "Platine d'assemblage";

: edit_box {

label = "Ep. :";

key = "Epais";

}

: spacer {

width = 7;

}[/surligneur] : edit_box {

label = "Larg. :";

key = "Larg";

}

: spacer {

width = 7;

}

: edit_box {

label = "Long. :";

key = "Long";

}

}

: column {

height = 10;

label = "Boulons";

: row {

spacer_0;

: column {

Diametre;

Qualite;

spacer_0;

}

}

}

: button {

key = "accept";

label = "OK";

is_default = true;

fixed_width = true;

alignment = centered;

}

 

 

}

}

Diametre : radio_row {

label = "Diamètre :";

key = "DiaBls";

: radio_button {

label = "ø10";

is_default = true;

value = 1;

}

: radio_button {

label = "ø12";

}

: radio_button {

label = "ø16";

}

: radio_button {

label = "ø20";

}

: radio_button {

label = "ø24";

}

: radio_button {

label = "ø27";

}

}

Qualite : radio_row {

label = "Qualité :";

key = "QualBls";

: radio_button {

label = "HM 4.6";

is_default = true;

value = 1;

}

: radio_button {

label = "HM 6.8";

}

: radio_button {

label = "HM 8.8";

}

: radio_button {

label = "HR 8.8";

}

: radio_button {

label = "HR 10.9";

}

}[/i]

et voici le petit programme sauvegardé sous "Hello.lsp" (que d'imagination"

(defun C:Vasy( / dcl_id )

(setq dcl_id (load_dialog "Attache.dcl"))

(if (not (new_dialog "Info_Attache" dcl_id))

(exit)

)

(mode_tile "Epais" 0)

(setq eppl (get_tile "Epais"))

;(action_tile "Epais" "((setq eppl (get_tile \"Epais\"))(princ eppl))")

(princ "eppl =")

(princ eppl)

(princ "lapl =")

(princ lapl)

(start_dialog)

(unload_dialog dcl_id)

(princ)

)

 

...et bien je n'arrive pas à imprimer les valeurs de "Epais" !!!

 

Je dois être vraiment nul.

 

Merci d'avance à celui qui pourra m'expliquer mon erreur

 

MiniMinus

Posté(e)

Juste en jetant un oeil,

 

il manque un OK_Cancel à la fin du DCL

 

Il manque aussi un done_dialog à la fin du LISP, à faire avant (start_dialog) et (unload_dialog dcl_id)

 

exemple ("accept" est la clé par défaut de OK) :

 

(action_tile

"accept"

(strcat

"(progn"

"(setq epll (get_tile \"epais\"))"

"(princ \"eppl =\")"

"(princ eppl)"

"(done_dialog))"

)

)

(start_dialog)

(unload_dialog dcl_id)

 

Tu trouveras des exemples de petites boites de dialogues ici

(princ)

 

[Edité le 15/6/2006 par (gile)]

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

Posté(e)

il manque un OK_Cancel à la fin du DCL

 

Au temps pour moi, je n'avais pas vu le bouton OK :calim:

 

Pour me faire pardonner ;)

 

(defun C:Vasy( / dcl_id )
(setq dcl_id (load_dialog "Attache.dcl"))
(if (not (new_dialog "Info_Attache" dcl_id))
(exit)
)
(mode_tile "Epais" 0)
(action_tile
"accept"
(strcat
"(progn"
"(setq eppl (get_tile \"Epais\"))"
"(princ \"eppl =\")"
"(princ eppl)"
"(done_dialog))"
)
)
(start_dialog)
(unload_dialog dcl_id)
(princ)
) 

 

Ou encore :

 

(defun C:Vasy (/ dcl_id)
 (setq dcl_id (load_dialog "Attache.dcl"))
 (if (not (new_dialog "Info_Attache" dcl_id))
   (exit)
 )
 (mode_tile "Epais" 0)
 (action_tile "Epais" "(setq eppl $value)")
 (action_tile
   "accept"
   (strcat
     "(progn"
     "(princ \"eppl =\")"
     "(princ eppl)"
     "(done_dialog))"
    )
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (princ)
) 

 

[Edité le 15/6/2006 par (gile)]

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

Posté(e)

Merci Gile pour les corrections.

 

Cela me permet de comprendre un peu mieux la logique du langage. Cependant après avoir essayé tes versions, il apparait que la variable est toujours égale à "nil". Est-ce normal ?

 

MiniMinus

Posté(e)

Non ce n'est pas normal si tu as entré quelque chose dans la case "Ep:"

 

Oui c'est normal si tu n'as rien entré, telle quelle la boite de dialogue permet de faire OK même si les cases (edit_box) sont vides, pour palier à çà tu peux attribuer une valeur par défaut à chaque case, en donnant une valeur à chaque variable dans le lisp ou en specifiant une "value" pour chaque case dans le DCL, dans ce cas il faut récupérer les valeurs à la fin, dans le (action_tile "accept") comme dans le premier exemple ci-dessus.

 

Tu peux aussi laisser les case vide et "griser" OK (mode_tile "accept" 1) et dans les (action_tile ...) de chaque edit_box tester les valeurs des variables et "dégriser" OK si elle ont toutes une valeur :

 

(if (and eppl lapl lopl) (mode_tile "accept" 0))

 

Sinon, en ce qui concerne la forme globale des LISP avec boite de dialogue, le plus souvent, je fais un (defun c: ...) qui ne fais qu'ouvrir la boite de dialogue, et récupérer les données pour les transmettre à une (ou des) autre fonction (defun ...) qui traite les données récupérées.

 

Exemple :

 

(defun C:Vasy (/ dcl_id eppl)
 (setq dcl_id (load_dialog "Attache.dcl"))
 (if (not (new_dialog "Info_Attache" dcl_id))
   (exit)
 )
 (setq	eppl "2.0"
lapl "30.0"
lopl "250.0"
 )
 (set_tile "Epais" eppl)
 (set_tile "Larg" lapl)
 (set_tile "Long" lopl)
 (action_tile "Epais" "(setq eppl $value)")
 (action_tile "Larg" "(setq lapl $value)")
 (action_tile "Long" "(setq lopl $value)")
 (action_tile
   "accept"
   "(progn (MaFonction eppl lapl lopl) (done_dialog))"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (princ)
)

(defun Mafonction (ep la lo)
 (princ (strcat
   "\nEpaisseur : "
   ep
   "\nLargeur : "
   la
   "\nLongueur : "
   lo
  )
 )
 (textscr)
)

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

Posté(e)

:cool:

Un très grand merci Gile !

 

Cela marche mais j'ai du être plus modeste avec ma boîte de dialogue. J'ai retiré les radio_button. Mais comme j'ai les mêmes intentions que toi : seulement utiliser les boîtes de dialogues pour entrer des données, cela ne me gêne pas trop (il faut maintenant que j'apprenne à récupérer les réponses des radio_button et des popup_list !!!). Je ferais plusieurs boîtes de dialogue différentes, c'est tout.

 

A ce propos, dois-je d'abord mettre toutes les lignes de mon programme puis ouvrir mes boîtes une à une ou mettre les lignes concernant la première boîte puis l'ouvrir, puis mettre les lignes pour la seconde puis l'ouvrir et ainsi de suite...

 

En tous cas : UN GRAND MERCI (J'étais pas loin de tout envoyer sur les roses.)

^Boîte de dialogue

Info_Attache : dialog {

label = "Test Edit_box";

alignment = left;

: column {

: edit_box {

label = "Ep. :";

key = "Epais";

}

: edit_box {

label = "Larg. :";

key = "Larg";

}

: button {

key = "accept";

label = "OK";

fixed_width = true;

alignment = centered;

}

: button {

label = "Cancel";

is_cancel = true;

is_default = true;

key = "cancel";

width = 8;

fixed_width = true;

}

}

}

Programme

(defun C:Vasy (/ dcl_id eppl lapl )

(setq dcl_id (load_dialog "Attache2.dcl"))

(if (not (new_dialog "Info_Attache" dcl_id))

(exit)

)

(action_tile "Epais" "(setq eppl $value)")

(action_tile "Larg" "(setq lapl $value)")

(action_tile

"accept"

"(progn (MaFonction eppl lapl ) (done_dialog))"

)

(start_dialog)

(unload_dialog dcl_id)

(princ)

)

 

(defun Mafonction ( ep la )

(princ (strcat

"\nEpaisseur : "

ep

"\nLargeur : "

la )

)

(textscr)

)

 

 

MiniMinus

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é