Aller au contenu

Get_tile ou set_tile


willy95

Messages recommandés

Bonjour les amis,

Je bloque sur le rappel d'une valeur dans une boite de dialogue :

1) Je reponds à la question : Genre quel age avez vous ? : 47

2) Je repose une question : Genre quel age avez vous ? : (j'aimerai qu'il me proprose 47) 

J'ai testé avec Get_tile et set_tile, mais je n'y arrive pas, quelqu'un peut-il m'aider sur ce coup la  ?

Merci par avance

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Serait-il possible d'avoir le code en question pour savoir de quoi on parle ? 😉
Si tu as tout dans une seule boîte de dialogue, il faut utiliser (action_tile) sur la première question pour utiliser un (set_tile) dans le cas où la seconde question n'est pas encore renseignée.

Avec un exemple, cela serait évidemment plus parlant ^^"

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Bien sur, mais mon code n'est pas du tout standard, alors accrochez vous...

 

(setq tmpnumlot (vl-filename-mktemp "Questionnumlot.dcl") file (open tmpnumlot "w"))   
(write-line	
"Questionnumlot
: dialog { key = \"Titrenumlot\"; label = \"\"; initial_focus = \"Listnumlot\"; spacer;   
: row {
: edit_box { label = \"Saisir le Numéro de Lot :\"; key = \"List2\"; height = 1; edit_width = 26; fixed_width = true; alignment = left;}}  
: spacer { width = 1; height =  1;}
ok_cancel;
edit_width = 10;}      
"
file)    
(close file)
(setq Dcl_Id (load_dialog tmpnumlot))
(new_dialog "Questionnumlot" Dcl_Id)
(set_tile "Titrenumlot" "Saisir un Numéro de Lot")
(set_tile "numlot" "0")
(action_tile "Listnumlot" "(setq Lot (nth (atoi $value) listnumlot))")
(IF (= List2 nil) (setq ni 0))
(action_tile "List2" "(setq Lot $value)")
(start_dialog)
(unload_dialog Dcl_Id)
(vl-file-delete tmpnumlot)

 

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Alors j'ai un peu de difficulté à comprendre la construction de la boîte de dialogue..

Citation

A dialog is the tile that defines the dialog box.

Supported Platforms: Windows and Mac OS

Windows
: dialog {
   initial_focuslabelvalue 
}

L'aide d'AutoCAD indique que la {Dialog Tile} ne peut pas avoir de 'key associée...Donc pour moi

: dialog { key = \"Titrenumlot\";

ne peut pas exister..Il suffit de définir le 'label en dur comme ceci

: dialog { label = \"Saisir un NUméro de Lot\";

et de supprimer la ligne

(set_tile "Titrenumlot" "Saisir un Numéro de Lot")

Après quelques tests, ta méthode fonctionne, mais je ne comprend pas pourquoi tu te compliques la vie ainsi ^^"

Ensuite je ne vois qu'une seule {edit_box} dans ta boîte de dialogue, et non deux. Il n'y a donc qu'une seule Tile, qui possède la key 'List2. Donc ma question c'est : où sont les key que tu définis avec (set_tile), nommé 'Listnumlot et 'numlot ?
Je pense que pour avoir 2 {edit_box}, comme tu le demandes dans ton premier post, il faudrait écrire quelque chose dans le genre :

(setq tmpnumlot (vl-filename-mktemp "Questionnumlot.dcl") file (open tmpnumlot "w"))   
(write-line	
"Questionnumlot
: dialog { label = \"Saisir un Numéro de Lot\"; initial_focus = \"List1\"; spacer;   
: edit_box { label = \"Saisir un Numéro de Lot :\"; key = \"List1\"; height = 1; edit_width = 26; fixed_width = true; alignment = left;}
: edit_box { label = \"Saisir le Numéro de Lot :\"; key = \"List2\"; height = 1; edit_width = 26; fixed_width = true; alignment = left;}  
: spacer { width = 1; height =  1;}
ok_cancel;
edit_width = 10;}      
"
file)    
(close file)
(setq Dcl_Id (load_dialog tmpnumlot))
(new_dialog "Questionnumlot" Dcl_Id)
(set_tile "List1" "0")
(action_tile "List1" "(if (= \"\" (get_tile \"List2\")) (set_tile \"List2\" $value))")
(action_tile "accept" "(setq Lot (get_tile \"List2\")) (done_dialog)")
(action_tile "cancel" "(done_dialog)")
(start_dialog)
(unload_dialog Dcl_Id)
(vl-file-delete tmpnumlot)

Je ne sais pas si cela correspond à ce que tu désires, mais c'est ce qui se rapproche le plus de ce que j'ai compris de ton premier post 😉

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup Luna pour ton temps passée à chercher à me comprendre pour me faire avancer dans mon problème, il est vrai qu'il est difficile pour moi d'exprimé mon utilité à ces étranges lignes de codes, je cherche simplement à proposer la valeur précédente par défaut car je saisie énormément de fois le même numéro de lot.

En validant directement par "OK" la valeur de ma dernière variable saisie est bien conservé mais j'aimerai juste affiché cette valeur.

Merci encore et désolé pour mon manque d'expression. Je vais faire plein de tests pour essayer mais ne vous embêter plus avec mon sujet. 

Lien vers le commentaire
Partager sur d’autres sites

Tu ne me déranges absolument pas, il n'y a aucune honte à avoir si ta logique n'est pas comme la mienne ! Au contraire chat signifie que tu penses par toi-même et que tu cherches tes propres solutions 😜
Cependant je n'arrive pas à comprendre ce que tu entends par

Il y a 2 heures, willy95 a dit :

je cherche simplement à proposer la valeur précédente par défaut

Parce qu'en ouvrant ta boîte de dialogue, il n'y a qu'une seule edit_box...
Donc tu veux dire dans le cas où la boîte de dialogue est ouverte plusieurs fois ?
Si c'est bien cela, il faut faire la différence entre :
 1°) la boîte de dialogue est ouverte plusieurs fois durant la même commande (mais entre deux commande, la valeur est oubliée)
 2°) la boîte de dialogue est ouverte plusieurs fois sur un même dessin (mais entre deux dessins, la valeur n'est pas partagée)
 3°) la boîte de dialogue est ouverte plusieurs fois et je désire conserver ma valeur précédente à chaque nouvelle ouverture de la boîte de dialogue

Dans le cas numéro 1, alors cela signifie que l'ouverture de ta boîte de dialogue est associée à une fonction nommée, que tu appelles via un (while) ou autre type de boucle. Il te faut alors prévoir à minima un argument pour ta fonction de BdL pour définir la valeur par défaut via

 (set_tile "List2" (cond (arg1) (""))

et ta fonction doit renvoyer la valeur contenue par List2 en fin d'exécution

Dans le cas numéro 2, alors cela signifie qu'il faut que tu utilises une variable globale (donc sa valeur n'est pas remise à zéro à la fin du programme) et que, comme pour le cas n°1, tu définisses ton edit_box comme ci-dessus.

Dans le cas numéro 3, alors tu peux utiliser la fonction (setenv) et (getenv) pour créer des variables qui sont partagées entre tous tes dessins, et donc tu définis ton edit_box ainsi

(set_tile "List2" (cond ((getenv "NumLot")) ("")))

en pensant à créer en premier lieu la variable "NumLot" comme suit

(if (null (getenv "NumLot")) (setenv "NumLot" "0"))

(j'ai pris "0" comme valeur par défaut, libre à toi de mettre la valeur que tu veux, et le nom de variable qui te plaît, évidemment !)

Bisous,
Luna

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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é