Aller au contenu

Menu, toolbar, ruban et palette


alala

Messages recommandés

Bonjour,

 

Dans le but d'avoir un ensemble d'outils qui soient à jour chez tout les dessinateurs d'un BE avec une seule routine à jour sur un serveur.

J'ai créer un LISP qui définit un menu automatiquement :

 

(defun CreateMenu ( NomMenu ListeDesMenus / 
				Menu
				NewMenu
				NewMenuGeneral
				LeMenu
				NewMenuItem
				SaveNewMenu
				MaMacro
				MenusDansLaBarre
				)

(vl-load-com)
(setq SaveNewMenu nil)
(setq Menus (vla-get-MenuGroups (vlax-get-acad-object)))

(setq LeMenu (vla-get-Menus (vla-item Menus NomMenu)))
(if (vl-catch-all-error-p(vl-catch-all-apply 'vla-item (list LeMenu NomMenu)))
	(setq NewMenu  (vla-add LeMenu NomMenu))
	(setq NewMenu  (vla-item LeMenu NomMenu))
)
(setq NewMenuGeneral NewMenu)
;; On vide le Menu
(vlax-for n NewMenu (vla-delete n))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;		  		 "---" "" indique un sséparateur			  			;;;
;;;		  	  "->" "Titre" indique le début d'un sous-menu			  		;;;
;;;		  	  "<-" "Titre" indique la fin d'un sous-menu			  		;;;
;;;		  	    "<--" "" indique la fin de tous les sous-menu			  		;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(mapcar
  '(lambda (x)
 (progn
   (cond
		 ((wcmatch "---" (nth 0 x))
		   (vla-AddSeparator NewMenu (1+ (vla-get-count NewMenu)))
		 )
		 
		 ((wcmatch "->" (nth 0 x))
		  (progn
		   (setq NewMenu
			  (vla-addSubMenu
			NewMenu
			(1+ (vla-get-count NewMenu))
			(nth 1 x)
			  )
		   )
		   )
		 )
		 
		 ((wcmatch "<-" (nth 0 x))
		  (if (not(eq(vla-get-name NewMenu) NomMenu))
			  (progn
				(setq NewMenu (vla-get-parent NewMenu ))
				(setq NewMenu (vla-get-parent NewMenu ))
			  )
		  )
		 )
		  
		 ((wcmatch "<--" (nth 0 x))
		  (while (not(eq(vla-get-name NewMenu) NomMenu))
			(setq NewMenu (vla-get-Parent NewMenu))
			(setq NewMenu (vla-get-Parent NewMenu))
		   )
		  )
		  
		 ((wcmatch  (nth 0 x) "*")
		   (setq MaMacro (strcat (chr 3) (chr 3) (chr 95) (nth 0 x) (chr 32)))
		   (setq NewMenuItem
			  (vla-addMenuItem
			NewMenu
			(1+ (vla-get-count NewMenu))
			(nth 1 x)
			MaMacro
			  )
		   )
		  (vla-put-helpString NewMenuItem (nth 1 x))
		 )
		 
	)
	   
	 )
 )
  ListeDesMenus
)

;; inserer le Menu à la fin des Menus
(vlax-for MenusDansLaBarre (vla-get-MenuBar (vlax-get-acad-object))
	(if (eq (vla-get-name MenusDansLaBarre) NomMenu)
		(vla-RemoveFromMenuBar NewMenuGeneral)
	)
)

(vla-insertInMenuBar
  NewMenu
  (+ 10 (vla-get-count (vla-get-MenuBar (vlax-get-acad-object))))
)

)

 

Celle-ci a pour avantage de prendre une liste de listes en entrée qui est formaté tel que :

'(
'("Action/Option" "Description dans le menu")
'("Action/Option" "Description dans le menu")
'("Action/Option" "Description dans le menu")
)

 

Je souhaitais partir de la même liste (avec quelques éléments en plus tel que le liens vers un icône par exemple) pour faire une toolbar, en ruban et une palette d"outils.

 

Je sait que les toolbars sont réalisables de la même maniére (ou presque)!

Mais je n'arrive pas à trouver le moindre information ou la moindre aide sur la possibilité de le faire pour les Rubans et les Palettes d'outils!

 

Avez vous une solution à me proposer?

 

Merci d'avance.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Voici un exemple que j'ai trouvé pour ajouter un bouton sur une toolbar

Visual LISP Example 
(vl-load-com)
(defun c:Example_AddToolbarButton()
   ;; This example creates a new toolbar called TestToolbar and inserts a
   ;; toolbar button into it. The toolbar is then displayed.
   ;; To remove the toolbar after execution of this macro, use the Customize Menu
   ;; option from the Tools menu.
   (setq acadObj (vlax-get-acad-object))
   (setq currMenuGroup (vla-Item (vla-get-MenuGroups acadObj) 0))
   
   ;; Create the new toolbar
   (setq newToolBar (vla-Add (vla-get-Toolbars currMenuGroup) "TestToolbar"))
   
   ;; Assign the macro string the VB equivalent of "ESC ESC _open "
   (setq openMacro (strcat (Chr 3) (Chr 3) (Chr 95) "open" (Chr 32)))
   (setq newButton (vla-AddToolbarButton newToolBar "" "NewButton" "Open a file." openMacro))
   
   ;; Display the toolbar
   (vla-put-Visible newToolBar :vlax-true)
)

 

Pour les palettes, je n'ai rien trouvé à part utiliser la ligne de commande

(command "'_ToolPalettes" "_import" Mon_fichier_xpt)

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Pour les boutons (sans icônes) qui exploitent la même liste en entrée j'ai fait :

 

(defun CreateBar ( NomToolBar ListeDesToolBars / 
				CurrToolBars
				ToolBar
				NewToolBar
				NewToolBarGeneral
				LaToolBar
				NewToolBarItem
				SaveNewToolBar
				openMacro
				ToolBarsDansLaBarre
				)
				
(vl-load-com)
(setq SaveNewToolBar nil)
(setq ToolBars (vla-get-MenuGroups (vlax-get-acad-object)))

(setq CurrToolBars (vla-item ToolBars NomToolBar))
(setq LaToolBar (vla-get-ToolBars CurrToolBars))
(if (vl-catch-all-error-p(vl-catch-all-apply 'vla-item (list LaToolBar NomToolBar)))
	(setq NewToolBar  (vla-add LaToolBar NomToolBar))
	(setq NewToolBar  (vla-item LaToolBar NomToolBar))
)
(setq NewToolBarGeneral NewToolBar)
;; On vide le ToolBar
(vlax-for n NewToolBar (vla-delete n))
(vla-put-visible NewToolBar :vlax-true)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;		  		 "---" "" indique un sséparateur			  			;;;
;;;		  	  "->" "Titre" indique le début d'un sous-ToolBar			  		;;;
;;;		  	  "<-" "Titre" indique la fin d'un sous-ToolBar			  		;;;
;;;		  	    "<--" "" indique la fin de tous les sous-ToolBar			  		;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(mapcar
  '(lambda (x)
 (progn
   (cond
		 ((wcmatch "---" (car x))
		   (vla-AddSeparator NewToolBar (1+ (vla-get-count NewToolBar)))
		 )
		 
		 ((wcmatch "->" (car x))
		 )
		 
		 ((wcmatch "<-" (car x))
		 )
		  
		 ((wcmatch "<--" (car x))
		 )
		  
		 
		 ((wcmatch  (car x) "*")
		   (setq openMacro (strcat (chr 3) (chr 3) (chr 95) (car x) (chr 32)))
		   (setq NewToolBarItem
			  (vla-AddToolbarButton
			NewToolBar
			(1+ (vla-get-count NewToolBar))
			(cdr x)
			(cdr x)
			openMacro
			  )
		   )
		  (vla-put-helpString NewToolBarItem (cdr x))
		 )
		 
	)
	   
	 )
 )
  ListeDesToolBars
)

)

j'y travaille encore pour faire passer automatiquement les outils dans des sous barres avec les me^me codes que pour les menus.

 

Le but étant d'exploité un max la même liste pour n'avoir qu'a modifier une liste pour mettre à jours tous les menus/toolbar/palette/ruban.

 

Pour la palette il faudrait donc que j'écrive un xtp (du XML il semblerait) et le charge, rien de trop compliqué mais plus long que de travailler avec les toolbar et menu.

 

Merci.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Lien vers le commentaire
Partager sur d’autres sites

Je trouve que tu te complique la vie

Pour le fichier XPT, tu fait un export depuis ta palette d'outils

Pour les menus, j'ai fait un menu partiel en texte (mns) que tu ajoutes s'il n'existe pas

Il faut aussi laisser aux utilisateurs la possibilité de gérer les outils comme ils veulent.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Ha mais je laisse aux utilisateurs le choix de créer et gérer leurs outils si ils savent (et veulent) le faire!

Le but ici n'est que de proposer d'avoir sur tous les postes de ceux-ci un menu commun avec les routines communes, e celles-ci toujours à jour.

 

Histoire d'éviter d'avoir à repasser sur chaque poste pour expliquer "à chaque fois" comment charger une palette d'outils, savoir si c'est bien la dernière en date qui va bien avec le gabarit, ...

 

Je me complique la vie en le codant, à l'usage ensuite c'est une liste à mettre à jour quand une routine est pondue, pas un mns + un xpt avec le risque d'oublier quelque chose entre deux.

 

Puis c'est aussi du savoir personnel que je me forge ;)

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Bonjour,

Responsable de l'environnement autocad dans mon service, je charge notre fichier "*.cuix" (sur serveur) en tant que fichier de personnalisation partiel.

Pour les autres utilisateurs, le même "*.cuix" est chargé en tant que fichier de personnalisation d'entreprise (lecture seule).

Ainsi, dès que je rajoute ou modifie des outils (commande lisp par exemple) dans des barres d'outils, dès que je modifie des menus déroulants, tous les utilisateurs bénéficient de ces modifications sans intervention de ma part sur leur poste.

Pour le moment, je n'utilise pas de palettes d'outils, puisque nous utilisons encore des menus mosaïque d'image.

Lorsque ce sera le cas, je retiens l'info de Patrick (Merci).

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

merci de l'info, je pensait que le .cuix se chargeait une seule et uniquement fois, mais si il y a une mise à jour cela devient très intéressant.

 

Encore merci.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

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é