Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

 

J'ai déja aperçu plusieur fois qu'il était possible de créer une Boite de dialogue (un fichier *.DCL) depuis une routine Lisp.

J'aurais besoin de savoir comment fait on pour ça, j'ai déja cheché sur le forum mais sans réponse bien clair (J'ai peut être loupé LA réponse j'ai vu ça mais j'ai pas vraiment tout suivi (que des ptits bout...) )

 

Voila ce que j'aimerais savoir faire depuis ma routine Lisp:

- par qu'elle moyen créer-t-on la fichier *.DCL

- Y à t'il un moyen particulier pour l'éditer (j'ai aperçus un truk du genre "write-lin"...)comment fonctionne t'il (--> ce moyen)

- y à t'il une façon particulière pour chaque élément de les editer (genre edit_box, bouton) ou alors c'est le même format pour chaque qu'on remplace ensuite par les bon mot-code (key label etc).

 

Voilou, qu'elle sont les fonctions et bout de codes pour pouvoir savoir faire ça?

 

Merci pour vos réponses.

Posté(e)

Salut

 

Je procède de cette manière en créant un fichier temporaire.

   (setq fic (vl-filename-mktemp "exl" nil ".dcl")
  fil (open fic "w")
  dwg (getenv "Patrick_35_Gabarit_Exl")
  gab (getenv "Patrick_35_Bouton_Gabarit")
   )
   (or gab (setq gab "0"))
   (foreach txt '(	"exl : dialog {"
		"  key = \"titre\";"
		"  alignment = centered;"
		"  is_cancel = true;"
		"  allow_accept = true;"
		"  width = 50;"
		"  : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}"
		"  spacer;"
		"  : boxed_row {"
		"    label = \"Gabarit\";"
		"    : toggle {key = \"gab\";}"
		"    : text   {key = \"txt\"; width = 40;}"
		"    : button {label = \"...\"; key = \"par\"; width = 2;}"
		"  }"
		"  spacer;"
		"  ok_cancel;"
		"}"
	 )
     (write-line txt fil)
   )
   (close fil)
   (setq dcl (load_dialog fic))
   (new_dialog "exl" dcl "")
   (set_tile "titre" titre)
   (set_tile "gab" gab)
   (bascule)
   (and dwg (affiche_txt dwg))
   (start_list "sel")
   (mapcar 'add_list lst)
   (end_list)
   (action_tile "sel"    "(setq val $value)")
   (action_tile "gab"    "(setq gab $value)(bascule)")
   (action_tile "par"    "(parcourir)")
   (action_tile "accept" "(done_dialog 1)")
   (action_tile "cancel" "(done_dialog 0)")
   (setq res (start_dialog))
   (unload_dialog dcl)
   (vl-file-delete  fic)
   (and dwg (setenv "Patrick_35_Gabarit_Exl" dwg))
   (and gab (setenv "Patrick_35_Bouton_Gabarit" gab))
   (list res val)
 )

 

Pour te simplifier la tâche, tu mets le texte de ton DCL dans une liste.

Si tu regardes bien dans le détail, tu retrouves ton fichier DCL

Il faut faire attention aux guillemets et pour dire au lisp qu'il faut les écrire, tu utilises le signe \ pour indiquer que c'est un caractère spécial.

Une bouche foreach pour écrire le DCL temporaire.

 

@+

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)

Merci pour vos réponse c'est bon j'ai réussi à faire des essais simple et ça marche.

 

En revanche j'ai un petit souci j'aimerai dans la liste du "foreach" :

(foreach txt '(     "exl : dialog {"
                       "  key = \"titre\";"
                       "  alignment = centered;"
                       "  is_cancel = true;"
                       "  allow_accept = true;"
                       "  width = 50;"
                       "  : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}"
                       "  spacer;"
                       "  : boxed_row {"
                       "    label = \"Gabarit\";"
                       "    : toggle {key = \"gab\";}"
                       "    : text   {key = \"txt\"; width = 40;}"
                       "    : button {label = \"...\"; key = \"par\"; width = 2;}"
                       "  }"
                       "  spacer;"
                       "  ok_cancel;"
                       "}"
                )
     (write-line txt fil)
   )

Metre une variable genre comme ça

(foreach txt '(     "exl : dialog {"


                       key_txt


                       
                       "  alignment = centered;"
                       "  is_cancel = true;"
                       "  allow_accept = true;"
                       "  width = 50;"
                       "  : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}"
                       "  spacer;"
                       "  : boxed_row {"
                       "    label = \"Gabarit\";"
                       "    : toggle {key = \"gab\";}"
                       "    : text   {key = \"txt\"; width = 40;}"
                       "    : button {label = \"...\"; key = \"par\"; width = 2;}"
                       "  }"
                       "  spacer;"
                       "  ok_cancel;"
                       "}"
                )
     (write-line txt fil)
   )

 

avec key_txt :

(setq n_i "3"))
  (setq key_txt (strcat" key = \"Position " n_i "\";"))

j'ai essayé mais j'ai pas trouvé mieux que de le faire séparément de la liste

donc de réécrire un write-line de cette façon :

(write-line key_txt fil)

 

ce qui ne m'arrange pas trop par la suite.

 

Donc si je pourai le metre directement dans la liste ça serait "magique"

 

Merci beaucoup.

Posté(e)

Salut

 

Pour le foreach, il te faut une liste.

Tu peux en utiliser plusieurs ou faire de cette manière

(append '("1" "2" "3") (list "4") '("5" "6" "7" "8"))

 

ps : "4" peut-être remplacé par une variable

 

@+

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

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é