Aller au contenu

Lire/Ecrire des variables dynamiques ou indexées ...


Messages recommandés

Posté(e)

Bonjour à tous

 

Tout d'abord, je ne sais pas si le terme employé est le bon ... ça fait genre j'en connais un peu ... ;)

 

Bref, mon soucis est le suivant :

 

J'ai besoin de mémoriser des informations liées à mes boites de dialogue (créées avec OpenDCL),sur la taille de chacune de mes boites,

Chacune de mes boites on une ID bien précise permettant de l'identifier : @$GPE:BOX

 

je souhaitait creer une fonction qui sait réinitialiser la taille de chaque boite, qui s'appelerai extend_OnClicked, utilisant les variables @#gpe:box:extended:x et @#gpe:box:extended:y.

 

Mon problème, c'est que cette fonction est unique ... (ben oui) je ve vais pas la recréerr pour chaque boite.

 

(setq @$GPE:ODCL "DOSSIER" @$GPE:BOX "GPE:CONFIG")
(defun c:extend_OnClicked ( /)
(if @#gpe:box:extended:x
	(progn
		(dcl_Form_Resize GPE:CONFIG @#gpe:box:extended:y @#gpe:box:extended:x)
		(setq @#gpe:box:extended:y nil @#gpe:box:extended:x nil )
	)
	(progn
		(setq @#gpe:box:extended:x (nth 2 (dcl_Form_GetRectangle GPE:CONFIG)))
		(setq @#gpe:box:extended:y (nth 3 (dcl_Form_GetRectangle GPE:CONFIG)))
		(dcl_Form_SetDialogMinMaxSizes GPE:CONFIG 32 32 32 32)

		(dcl_Form_Resize GPE:CONFIG 32 32)
	)
)
)

 

Ce que je voudrais faire c'est associer le nom de la boite à la définition de la variable , genre :

 

 



(setq (strcat "@#gpe:box:extended:" @$GPE:BOX ":x") 22)


 

 

........... :casstet:

 

 

ou une méthode équivalente...

 

Merci ...

 

 

[Edité le 21/11/2007 par stephan35]

Posté(e)

Je ne suis pa sûr de comprendre

 

_$ (setq @$GPE:ODCL "DOSSIER" @$GPE:BOX "GPE:CONFIG")

"GPE:CONFIG"

_$ (set (read (strcat "@#gpe:box:extended:" @$GPE:BOX ":x")) 22)

22

_$ @#GPE:BOX:EXTENDED:GPE:CONFIG:X

22

 

 

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

Posté(e)

Trop fort Gile !!!!!!!!

 

Et tu as bien compris !!!!!

 

L'intérêt de cette technique, c'est que l'on créer des variables indéxée sur le résultat d'autres varaible, trop fort !!!!! Génial !!!! Youpi !!! :thumbup:

 

Merci maître ... ;)

Posté(e)

Oops,

 

J'ai résolu le problème trop vite !!!!

 

Ce que m'a fournit gile fonctionne parfaitement, seulement, je ne sait pas relire mes données indéxées .... :casstet:

 

En fait lorsque je fait :

 

 

(setq @$GPE:ODCL "INDICES" @$GPE:BOX "GPE:INDICE")

(set (read (strcat "@GPE:BOX:" @$GPE:BOX ":CHK")) "toto")

 

Je créé une variable "@GPE:BOX:GPE:INDICE:CHK" qui contient "toto"

 

Seulement j'aimerai pouvoir la relire de manière indéxée :

 

 

 

Genre

 

(if (= (read (strcat "@GPE:BOX:" @$GPE:BOX ":CHK")) "toto")
(progn
)
)

 

Et là je bloque bêtement ........... :casstet:

 

 

Merci !!!!

Posté(e)

Une petite séquence qui peut aider à comprendre les fonctions eval, set, setq et quote (ou '),

sachant que (setq a 1) est un raccourci pour (set (quote a) 1) ou (set 'a 1).

 

Commande: (setq a 1)

1

 

Commande: !a

1

 

Commande: (setq b 'a)

A

 

Commande: !b

A

 

Commande: (eval b)

1

 

Commande: (set b 2)

2

 

Commande: !a

2

 

Commande: !b

A

 

Commande: (eval b)

2

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

Posté(e)

Merci Gile !

 

..... dans mon cas le plus dur est de ne pas confondre , effectivement, la syntaxe de création de la variable avec celle de l'interprétation de son contenu ....

 

J'avais testé l' "eval" mais sans le "READ" qui sert à composé le nom de variable .....

 

PS: sympa ton petit " tuto " - " rappel " ;)

 

 

Encore merci !

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é