lenoil Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 salut à tous, j'ai réalisé une boîte de dialogue en lisp et j'ai mis un bouton dessus. J'aimerais pouvoir désactiver (is_enabled) ou desafficher ce bouton par une méthode lisp mais comment faire je n'ai pas trouvé ! Avez vous la solution Merci car je suis un peu à la bourre A ++
(gile) Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Salut, Dans ton LISP qui commande la boite de dialogue, tu ajoute une conditionnelle : (if ([i]condition[/i]) (mode_tile "cle_bouton" 1) ; le bouton est désactivé (mode_tile "cle_bouton" 0) ; le bouton est activé ) Le tout devant être inclus dans une boucle pour remettre à jour l'activation du bouton après les interventions de l'utilisateur. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Le tout devant être inclus dans une boucle pour remettre à jour l'activation du bouton après les interventions de l'utilisateur.Tout dépend de ton fonctionnement.Par exemple, un bouton peut en activer d'autres ou selon certaines conditions. Extrait de l'aide(mode_tile key mode) Arguments key A string that specifies the tile. The key argument is case-sensitive. mode An integer that can be one of the following:0 Enable tile1 Disable tile2 Set focus to tile3 Select edit box contents4 Flip image highlighting on or off @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lenoil Posté(e) le 20 septembre 2005 Auteur Posté(e) le 20 septembre 2005 Merci beaucoup gile cela fonctionne mais il y a quelquechose que je ne comprends pas: Pourquoi autodesk donne une API graphique DCL avec des attributs disponibles si on ne peut pas les changer directement ?Je m'explique une méthode du genre : Set_Attribut (Key NomDeAttirbut ValeurAttibute)Exemple pour mon cas: Set_Attribut("btn_test" "is_enabled" "true") en tout cas merci
(gile) Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Pourquoi autodesk donne une API graphique DCL avec des attributs disponibles si on ne peut pas les changer directement ? je ne suis pas sûr d'avoir bien compris la question, mais les attributs en .dcl définissent la boite de dialogue initiale, c'est par le LISP qu'on peut modifier leurs valeurs. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lenoil Posté(e) le 20 septembre 2005 Auteur Posté(e) le 20 septembre 2005 Ok mais quelle est cette méthode ? J'ai une autre question : peut on ouvrir une boite de dialogue DCL en modeless et non en modal. Merci
bonuscad Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Une autre façon, avec 1 exemple.fichier test.dcl test : dialog { label = "Essai de bouton"; : toggle { label = "Bouton bascule"; mnemonic = "B"; key = "btn"; } ok_cancel_err; } Comme définie, la touche B active ou désactive la case le fichier lisp (defun c:test_bouton ( / dcl_id what_next v_btn) (setq dcl_id (load_dialog "test") v_btn "") (setq what_next 2) (while (< 1 what_next) (if (not (new_dialog "test" dcl_id)) (exit)) (set_tile "btn" v_btn) (action_tile "btn" "(setq v_btn $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) ) (unload_dialog dcl_id) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Ok mais quelle est cette méthode ? Les fonctions (action_tile key action-expression) (get_attr key attribute) (get_tile key) (mode_tile key mode) (set_tile key value) sont décrites dans l'Aide aux développeurs -> AutoLISP Reference -> AutoLISP Functions ou -> AutoLISP Developer's Guide -> Working with Programmable Dialog Boxes -> Programmable Dialog Box Reference -> Programmable Dialog Box Function Synopsis -> Tile and Attribute-Handling Functions peut on ouvrir une boite de dialogue DCL en modeless et non en modal Alors là, aucune idée !!!Je ne sais pas ce que veulent dire "modeless" et "modal". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lenoil Posté(e) le 20 septembre 2005 Auteur Posté(e) le 20 septembre 2005 Modeless veut dire que tu peux continuer à aller sur la carte quand ta fenêtre DCL est ouverteModal : tant que ta fenêtre n'est pas fermée tu ne peux rien faire sur la carte voilà UNe autre question je suis chiant je sais mais j'ai du mal ...... peut-on rendre invisible une boite de dialogue ? merci
(gile) Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 Un petit exemple qui, j'espère répond à tes questions :la boite de dialogue disparaît le temps de la sélection des objets, puis se ré-ouvre. Définition de la boite : test:dialog{ label="Test"; :button{ label="Choix des objets key="objt"; fixed_width=true; alignment=centered; } ok_cancel; } Le LISP qui la controle : (defun c:test (/ dcl_id boucle objets) (setq dcl_id (load_dialog "test.dcl")) (setq boucle 2) (while (>= boucle 2) (if (not (new_dialog "test" dcl_id)) (exit) ) (if objets (mode_tile "accept" 0) (mode_tile "accept" 1) ) (action_tile "objt" "(done_dialog 3)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq boucle (start_dialog)) (cond ((= boucle 3) (setq objets (ssget)) ) ) ) (unload_dialog dcl_id) (princ) ) [Edité le 20/9/2005 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 En reprenant mon précédent exemple.Même principe que giles avec un controle un peu plus poussé DCL test : dialog { label = "Essai de bouton"; : row { : edit_box { label = "Distance:"; mnemonic = "D"; key = "e_dist"; edit_width = 10; } : button { label = "Saisir <"; mnemonic = "S"; key = "pick_d"; } } : row { : edit_box { label = "Angle :"; mnemonic = "A"; key = "e_ang"; edit_width = 10; } : button { label = "Saisir <"; mnemonic = "S"; key = "pick_a"; } } : toggle { label = "Bouton bascule"; mnemonic = "B"; key = "btn"; } ok_cancel_err; } LISP (defun tstval (val idx_v / val idx_v) (if (or (distof val) (angtof val)) (progn (if idx_v (setq e_dist (distof val)) (setq e_ang (angtof val)) ) (set_tile "error" "") ) (progn (set_tile "error" "Valeur numérique incorrecte !") (if idx_v (set_tile "e_dist" (rtos e_dist)) (set_tile "e_ang" (angtos e_ang)) ) ) ) ) (defun c:test_bouton ( / dcl_id what_next v_btn e_dist e_ang) (setq dcl_id (load_dialog "test") v_btn "" e_dist 0.0 e_ang 0.0) (setq what_next 4) (while (< 1 what_next) (if (not (new_dialog "test" dcl_id)) (exit)) (set_tile "btn" v_btn) (set_tile "e_dist" (rtos e_dist)) (set_tile "e_ang" (angtos e_ang)) (action_tile "btn" "(setq v_btn $value)") (action_tile "e_dist" "(tstval $value T)") (action_tile "e_ang" "(tstval $value nil)") (action_tile "pick_d" "(done_dialog 3)") (action_tile "pick_a" "(done_dialog 2)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) (cond ((= what_next 2) (initget 1) (setq e_ang (getangle "\nAngle?: ")) ) ((= what_next 3) (initget 71) (setq e_dist (getdist "\nDistance?: ")) ) ) ) (unload_dialog dcl_id) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 20 septembre 2005 Posté(e) le 20 septembre 2005 J'ai un peu modifié le code dcl (celui de gile) ci-dessus (enlevé des lignes qui ne servaient à rien) Tu trouvera des explications (en anglais) dans l'Aide aux développeurs -> AutoLISP Developer's Guide -> Working with Programmable Dialog Boxes -> Managing Dialog Boxes -> Functions for Hiding Dialog Boxes peut on ouvrir une boite de dialogue DCL en modeless et non en modal La réponse me semble être non, mais on peut la faire disparaître momentanément. [Edité le 20/9/2005 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lenoil Posté(e) le 21 septembre 2005 Auteur Posté(e) le 21 septembre 2005 Merci à tous les deux Votre aide + aide autocad lisp m'a beaucoup servi et j'ai réussi à m'en sortir mais que c'est compliqué de faire de l'interaction entre les boite de dialogue et l'espace papier et le rafraichissement de liste dans la boite de dialogue En toiut cas merci beaucoup j'aurai surement d'autres questions .....;)
willy95 Posté(e) le 25 août 2015 Posté(e) le 25 août 2015 Bonjour, Bien que le sujet date un peu, il est d'actualité pour moi, je suis en train de me pencher sur les Boites de dialogue qui me passionne beaucoup mais car il y à un mais, j'ai du mal à comprendre comment faire apparaitre (désassombrir) une autre question dans la même boite de dialogue : 1) question (dans le dcl) :: toggle { label = "Hauteur"; key = "Hautok"; height = 1 ; edit_width = 5; alignment = left; } 2) Si oui, question 2 (dans le dcl):: edit_box { label = "Hauteur (m) :"; key = "Question2"; height = 1 ;edit_width = 5; alignment = left; } Un truc du genre dans le lisp... (if (= Hautok 0) (mode_tile "Question2" 0) (mode_tile "Question2" 1) ) Si quelqu'un peut m'aider avec un exemple ultra simple ( 1 tick à cocher ou pas qui active ou pas une question avec une donné à saisir ) Merci à vous
(gile) Posté(e) le 25 août 2015 Posté(e) le 25 août 2015 Salut, En DCL les boites dialogues sont pilotées par des gestionnaires d'évènement (sortes de réacteurs) en LISP. La fonction action_tile permet de définir le comportement du programme quand un contrôle est sollicité. Dans ton cas, le programme doit réagir quand l'état du toggle (coché/décoché) change. Un exemple (pas testé) (action_tile "Hautok" (vl-prin1-to-string '(if (= $value "1") (mode_tile "Question2" 0) (mode_tile "Question2" 1) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
willy95 Posté(e) le 26 août 2015 Posté(e) le 26 août 2015 Bonjour Gile, Je te remercie pour ta réponse rapide et précise, en revanche cela fonctionne presque bien, le problème maintenant doit venir d'ailleurs, à l'ouverture de la boite l'état du "toogle" est décoché avec la "Question2" accessible, il faut que je coche et décoche pour faire verrouillé la "question2", comment faire pour qu'il reste décoché à l'ouverture et que la "question2" s'active quand je coche ? Quand ont valide "Renseigné l'essence" la possibilité de renseigner la hauteur ce fait automatiquement J'ai essayé plusieurs modifications mais sans résultat, alors encore un peu d'aide serait le bien venue. Merci
(gile) Posté(e) le 26 août 2015 Posté(e) le 26 août 2015 Salut, Il y a deux moyens d'initialiser les valeurs des contrôles DCL : - par le fichier DCL (avec value et is_enabled): toggle { label = "Hauteur"; key = "Hautok"; height = 1 ; edit_width = 5; alignment = left; value = "0"; } : edit_box { label = "Hauteur (m) :"; key = "Question2"; height = 1 ;edit_width = 5; alignment = left; is_enabled = false; } - depuis le LISP (avec set_tile et mode_tile avant les expressions action_tile)(set_tile "Hautok" "0") (mode_tile "Question2" 1) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
willy95 Posté(e) le 26 août 2015 Posté(e) le 26 août 2015 Encore merci pour cette patience avec moi. Dans mon "code" entre saisir et diamètre et saisir et hauteur c'est Parfait (enfin et Merci) mais je souhaite "griser" <Saisir la hauteur> sauf quand on coche <Renseigner l'essence> et la je re re re bloque malgrès avoir réfléchis et essayer dans tous les sens. Je pensais faire : (set_tile "Essence" "1") (mode_tile "Hautok" 1) et bah non , encore une fois je suis à coté de la plaque... :( Je suis presque au bout, je vais regarder tout à nouveaux.
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