Aller au contenu

combobox et addlist


harksin

Messages recommandés

bonjour

 

mon problème du moment est le suivant:

j'ai une combobox nommé "materiaux" dont je renseigne la liste de la maniere suivante:

 


(Setq X_mat
  	   (Odcl_ComboBox_AddList essai1_DclForm2_Materiaux
	 (list
	   "nouveau" [as String]
	   "BBTM" [as String].
	   "GNT 0/20" [as String]
	   "GNT 0/31.5" [as String]



	  )
	 )
 )

jusque ici tout vas bien

cependant maintenant je voudrai ajouté des element a cette liste

 

je definie une variable liste_mat_vo a l'aquelle j'ajoute autre_mat

 
(setq autre_mat "grave_bitume")
(setq Liste_mat _vo (cons list_mat_vo autre_mat))

 

bon et la ou le bas blesse c'est ici, je ne sais pas du tout commen definir une lite object dcl a partir d'une liste lisp...

 

exemple de test infructueux

 


(Setq X_mat
  	   (Odcl_ComboBox_AddList essai1_DclForm2_Materiaux
	 (list
	 

                 list_mat_vo


	  )
	 )
 )

 

 

si quelqu'un a une petite idée je suis preneur

 

 

merci d'avance

 

harksin

Lien vers le commentaire
Partager sur d’autres sites

Bon en fait je me revelle incappable de faire un addlist tout bette...

 

la formule prescrite dans l'aide intelligente ne fonctionne pas.

(Odcl_ComboBox_AddList essai1_INIT_DEF_Input_Selector
	 (list
		   "Creation_voirie"
	  	   "Creation_bordure"
	       	   "Creation_trottoir"

	  )
   )

 

y a il des reglage que j'aurai oublier dans l'editeur de boite?

ou bien esse le nom de mes variable qui perd le script?

 

pour le moment je definie ma fonction, puis ma liste comme si dessu, puis les fonction de chaque bouton, et enfin j'affiche la boite.

 

y a il une erreur de procédure dans l'ordre?

 

pour revenir a mon sujet initial ta proposition a l'air de tourner , je suis tombé sur un srcip qui utilisait cette metode.

 

 

bonne soirer a tous

 

harksin

 

note: mon projet s'appelle "essai1" ma boite "INIT_DEF" et ma combobox "input_selector"

 

[Edité le 17/2/2011 par harksin]

Lien vers le commentaire
Partager sur d’autres sites

voici le code dans sa globalité, l'idée étant de crée un lanceur de boite object dcl.

par exemple dans la combobox "input_Selector" on choisirai création_voirie, ce qui permetrai de lancé une boite de dialogue qui recupera les caracteristique voulu par l'utilisateur.

mais en l'état la liste déroulante ne comprend aucun des element souaiter. hormis un "combobox1" hérité depuis ou? je ne sais pas.

 

 

edit : j'ai réglé mon avatar sur 000.gif dans mon compte, pourtant c'est toujour le tien qui apparait. sais tu de quoi ca peut venir?

 

 

 

 

(defun c:launcher()
 (Odcl_LoadProject "essai1.odc" T)



  	 (setq list_module  (Odcl_ComboBox_AddList essai1_INIT_DEF_Input_Selector
	 (list
		   "Creation_voirie"
	  	   "Creation_bordure"
	       	   "Creation_bordure"

	  )
   )
)



  (defun c:INIT_DEF_Input_Selector_KillFocus () 
    (Setq Module_Name (Odcl_ComboBox_GetTBText essai1_INIT_DEF_Input_Selector))
  )

 (defun c:INIT_DEF_Gauche_OnClicked ()
   (setq Track_direction 0)
 )

  (defun c:INIT_DEF_Droite_OnClicked ()
   (setq Track_direction 1)
 )

(defun c:INIT_DEF_wake_up_input_OnClicked ()
(setq Module_Name (strcat "(c:" Module_Name ")"))
  (eval (read Module_Name ))
   
  )
  
(Odcl_Form_Show essai1_INIT_DEF)


)

 

[Edité le 21/2/2011 par harksin]

Lien vers le commentaire
Partager sur d’autres sites

je vien de remarqué un truc dans mon editeur objectdcl, a priori il faudrait que je résolve ces erreur, mais je n'arrive pas a comprendre leur sens. aurais tu une piste?

par ailleurs j'ai réussi a afficher les élément voulu dans la combobox, mais uniquement en renseignant la cellule "liste" dans l'éditeur objectdcl.

en fait pour le moment je n'ai réussi aucun transfert d'information entre mon lisp et mon odc. je suis simplement capable de l'afficher.

 

 

 

  Event handler c:DclForm1_wake_up_input_OnClicked is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::INIT_DEF::TextButton1.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:INIT_DEF_Input_Selector_OnKillFocus is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::INIT_DEF::ComboBox1.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:DclForm1_gauche_OnClicked is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::INIT_DEF::Option1.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:DclForm1_Droite_OnClicked is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::INIT_DEF::Option2.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:DclForm2_Voie_Name_OnUpdate is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::DEF_VO::TextBox1.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:DclForm2_addmat_OnClicked is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::DEF_VO::TextButton2.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:DEF_VO_epsseur_OnKillFocus is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::DEF_VO::TextBox1.
2011/02/21 15:18:00	ERROR(Project Analyze)    	  Event handler c:DEF_VO_TextBox1_OnKillFocus is not implemented.
2011/02/21 15:18:00	ERROR(Project Analyze)    	    Declared in essai1::DEF_VO::TextBox1.
2011/02/21 15:18:00	INFO(Project Analyze)     	Analysis found errors.
2011/02/21 15:18:00	INFO(Project Analyze)     	-----------------------------------------------------

 

 

pour finir, je viens de tenter de récupéré l'élément actif de la cellule combbox mais avec l'essai1 je n'obtiens rein dans module_name , est avec l'essai 2 j'obtiens la valeur 1 , ce qui daprés ce que je comprend est louche car c'est le deuxième élément de la liste.

A mon avis je suis passé a coté de quelque chose de fondamental, mais j'ignore quoi.

 

 (defun c:INIT_DEF_Input_Selector_OnKillFocus()
    ;;essai1;;(Setq Module_Name (Odcl_ComboBox_GetTBText essai1_INIT_DEF_Input_Selector))
   ;;;;essai2;;;(Setq Module_name (Odcl_ComboBox_GetCurSel essai1_INIT_DEF_Input_Selector))
 )

Lien vers le commentaire
Partager sur d’autres sites

Salut, je n'ai pas le temps aujourd'hui mais on voit bien que ton écriture n'est pas rigoureuse :

 

(setq list_module (Odcl_ComboBox_AddList .... ne sert à rien, cette fonction renvoie T ou nil.

(eventuellement interessant pour savoir si le remplissage s'est effectué correctement.

 

(defun c:INIT_DEF_Input_Selector_KillFocus ()

?

(defun c:INIT_DEF_Input_Selector_ ONKillFocus ()

non ?

 

Pour tes non-implémentations, c'est à toi de gérer. Si tu coches un évènement dans l'éditeur, il faut implémenter l'évènement dans le lisp. Et inversement.

 

Au fait :

(Odcl_ComboBox_AddList

est à mettre dans un OnInitialize de ta boite. C'est le B.A.BA car une boite peut être ouverte et fermée par ta propre programmation au sein d'une seule fonction. Ca serait une habitude à prendre. Un message récent dans ce forum le rappelle.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

merci pour le temps que tu prend avec moi, je suis dans mes tout début avec object dcl et a peine plus en Lisp... alors je tatone, et j'ai grand besoin de structurer ma pensé...

mais avec de la motivation on déplace des montagne non?

 

 

J'ai vue parler de ce fameux "oninitialize" mais je n'en comprend pas la porté.

que doit il contenir? et que peut il contenir?

 

j'ai compris d'ou venez les erreur, en fait le lisp associer dans l'editeur ne se met pas a jour automatiquement.

 

pour le onkillfocus c'était bien une erreur de frappe. mais sa ne marche pas mieux.

 

voici la nouvelle mouture.

(defun c:launcher()
 (Odcl_LoadProject "essai1.odc" T)

 (defun c:essai1_INIT_DEF_OnInitialize ( /)
        (odcl_ComboBox_AddList  essai1_INIT_DEF_Input_Selector (list "Creation_voirie" "Creation_bordure" "Creation_bordure"))
 )


 (defun c:INIT_DEF_Input_Selector_OnKillFocus()
   (Setq Module_Name (Odcl_ComboBox_GetTBText essai1_INIT_DEF_Input_Selector))
  )

 (defun c:INIT_DEF_Gauche_OnClicked ()
   (setq Track_direction 0)
 )

(defun c:INIT_DEF_Droite_OnClicked ()
   (setq Track_direction 1)
 )

(defun c:INIT_DEF_wake_up_input_OnClicked ()
    (setq Module_Name (strcat "(c:" Module_Name")"))
    (eval (read Module_Name ))   
  ) 
(Odcl_Form_Show essai1_INIT_DEF)
)

Lien vers le commentaire
Partager sur d’autres sites

Lis donc le post précédent. Tu vas trouver à force...

 

Mets plutôt un Onselchanged qu'un killfocus (+ adapté aux zones de textes éditables) à moins que ta combo soit éditable.

 

(Setq Module_Name (Odcl_ComboBox_GetTBText essai1_INIT_DEF_Input_Selector))
(setq Module_Name (strcat "(c:" Module_Name")")) 

 

Attribué la même variable à deux choses si différentes m'échappe...

 

Entraines-toi bien :cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Hello

 

bon, je suis arriver a alimenter ma liste ce qui n'est déjà pas si mal!

 

 

la variable module_name récupère un texte dans ma combobox, ce texte est le nom d'un lisp qui doit être lancer . c'est pour cela que je lui accole "(c:"...")" affin de faire un (eval (read ma variable)).

esse une mauvaise manière de faire? y a il un moyen plus trivial d'arriver au mémé résultat?

ou bien une autre manière de penser le problème?

 

 

Ceci étant dit je me trouve dans l'impossibilité de récupère le texte de ma combobox.

j'ai appliqué un event onselchange comme tu me l'a conseiller.

ma combobox est de type 2 (juste déroulante)

mais lorsque je sélectionne un des éléments de la liste la boite me renvoie

" erreur: nombre d'arguments trop important"

de quoi cela peut il venir a ton avis??

 

edit : ce qui est surprenant c'est que quand je lance (commande de suivie et animation dans l'editeur lisp il m'arrete la dessu :

  (defun c:INIT_DEF_OnInitialize ()
	(odcl_ComboBox_AddList essai1_INIT_DEF_Input_Selector (list "Creation_voirie" "Creation_bordure" "Creation_trottoir"))
 )
 

hors le on initialise est finie est a fonctioner vue que j'ai la liste qui apparai... alors pourquoi il appelle cette fonction?

 

Harksin

 

 

[Edité le 24/2/2011 par harksin]

Lien vers le commentaire
Partager sur d’autres sites

, ce texte est le nom d'un lisp qui doit être lancer . c'est pour cela que je lui accole "(c:"...")" affin de faire un (eval (read ma variable)).

esse une mauvaise manière de faire? y a il un moyen plus trivial d'arriver au mémé résultat?

ou bien une autre manière de penser le problème?

 

Non, tu peux mettre ce que tu veux du moment que c'est du lisp !

 

mais lorsque je sélectionne un des éléments de la liste la boite me renvoie

" erreur: nombre d'arguments trop important"

de quoi cela peut il venir a ton avis??

 

Il y a une erreur dans le lisp qui rassemble la réaction à onselchanged. Mais franchement, coment veux-tu que je trouve ton erreur ? Y a pas le code dans ton message !

 

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

hello bon j'ai revu mes base et bien écouté tes conseil et j'ai réussit a faire ce que je souhaiter !

merci beaucoup!

 

ceci-dit comme plus on en fait plus on veut en faire j'ai continuer mon bout de chemin

tout se passer bien jusqu'à ce que je tombe sur une erreur saugrenu...

 

(but de l'opération récupérer le texte d'une cellule object dcl texte standard)

 

voila a priori les deux exemple ci dessou marche... puisque je réussit a récupérer les donné de ma cellule...

sauf que voila, peut importe la méthode, je ne récupère jamais je dernier caractère de la cellule

voirie==> voiri

 

a tu une idée de se qui peut causer cela? j'avoue être a cours de cartouche....

 
(defun c:DEF_VO_Voie_Name_OnUpdate (sText /)
  (Setq vo_name (Odcl_Control_GetText essai1_DEF_VO_Voie_Name))
 )

 (defun c:DEF_VO_voie_largeur_Onkillfocus ()
  (Setq vo_la (Odcl_Control_GetText essai1_DEF_VO_voie_largeur))
 )

Lien vers le commentaire
Partager sur d’autres sites

Re bonsoir

bon en fait, c'était le on killfocus qui ne passai pas bien

 

du coup j'ai associer la récupération de mes variable au bouton validé et sa marche très bien.

 

Par contre j'aurai besoin d'un conseil,

 

je souhaite faire une petite boite de dialogue qui contiene une celecteur de calque.

soit:

-une combobox contenant la liste des calque

-une "je sais pas encore quoi" pour permetre l'affichage du calque courant.

 

a tu déja rencontrer ce cas?

peut tu me conseiller une orientation ou un outil?

 

merci d'avance

 

Harksin

Lien vers le commentaire
Partager sur d’autres sites

-une combobox contenant la liste des calque

 

D'après tes réponses, tu sais alimenter une combo avec une liste.

 

--une "je sais pas encore quoi" pour permetre l'affichage du calque courant.

 

Un bete label ? ou alors la selection de l'élément au sein même de la combo.

 

Si tu comprends la logique d'ODCL et connait le lisp, en principe, il n'y a plus de questions de ce type à se poser. Faut y aller :cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
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é