找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1475|回复: 4

[求助] [求助]:如何用Vlisp添加自定义局部菜单

[复制链接]
发表于 2003-7-26 20:17:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何用Vlisp往CAD菜单中添加自定义局部菜单?请各位高人帮忙!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-26 20:19:50 | 显示全部楼层

Re: [求助]:[求助]:如何用Vlisp添加自定义局部菜单

最初由 sqmjk01 发布
[B]如何用Vlisp往CAD菜单中添加自定义局部菜单?请各位高人帮忙! [/B]

参考这个

  1. ;;;*************************************************************************;;;
  2. ;;; API-MENUS.LSP                                                           ;;;
  3. ;;; Visual LISP ActiveX Menu/Toolbar Method Utilities                       ;;;
  4. ;;; Copyright (C)2001 David M. Stein, All Rights Reserved.                  ;;;
  5. ;;;*************************************************************************;;;
  6. ;;; Version 2001.00 06/06/01: Initial release                               ;;;
  7. ;;;*************************************************************************;;;

  8. (vl-load-com)
  9. (setq $acad (vlax-get-acad-object)
  10.       $adoc (vla-get-activedocument $acad)
  11. )

  12. ;;;*************************************************************************
  13. ;;; DESCRIPTION: Returns vla-object to menugroups collection
  14. ;;;*************************************************************************

  15. (defun Get-MenuGroups ()
  16.   (vla-get-MenuGroups $acad)
  17. )

  18. ;;;*************************************************************************
  19. ;;; DESCRIPTION: Returns menugroup object for given menugroup name (string)
  20. ;;;*************************************************************************

  21. (defun Get-MenuGroup (mgname)
  22.         (if (menugroup mgname)
  23.                 (vla-item (Get-MenuGroups) mgname)
  24.         )
  25. )

  26. ;;;*************************************************************************
  27. ;;; DESCRIPTION: Adds new menugroup to menugroup collection, returns menugroup object
  28. ;;;*************************************************************************

  29. (defun MenuGroup-Add (mgname)
  30.         (vla-Add (Get-MenuGroups) mgname)
  31. )

  32. ;;;*************************************************************************
  33. ;;; DESCRIPTION: Removes named menugroup from menugroups collection
  34. ;;;*************************************************************************

  35. (defun MenuGroup-Delete (mgname)
  36.         (if (setq mg (Get-MenuGroup mgname))
  37.                 (vla-Delete mg)
  38.         )
  39. )

  40. ;;;*************************************************************************
  41. ;;; MODULE: MenuGroups-ListAll
  42. ;;; DESCRIPTION: Returns list of all menugroup names in current application session
  43. ;;; ARGS: none
  44. ;;; EXAMPLE: (Get-MenuGroups-ListAll) --> ("ACAD" "ASW2K" "ASW2K-P" ...)
  45. ;;;*************************************************************************

  46. (defun MenuGroups-ListAll ( / out)
  47.   (vlax-for each (Get-MenuGroups)
  48.                 (setq out (cons (vla-get-name each) out))
  49.         )
  50.         out
  51. )

  52. ;;;*************************************************************************
  53. ;;; DESCRIPTION: Boolean test for existence of named menugroup, returns menugroup object if found
  54. ;;;*************************************************************************

  55. (defun MenuGroup-Exists-p (name)
  56.         (Get-MenuGroup name)
  57. )

  58. ;;;*************************************************************************
  59. ;;; DESCRIPTION: Returns vla-object to popupmenus collection for named menugroup
  60. ;;;*************************************************************************

  61. (defun PopupMenus (mgroup / mg)
  62.         (if (setq mg (Get-MenuGroup mgroup))
  63.                 (vla-get-Menus mg)
  64.                 (princ (strcat "\nMenugroup not found: " mgroup))
  65.         )
  66. )

  67. ;;;*************************************************************************
  68. ;;; DESCRIPTION: Returns list of all popup menu names for given menugroup
  69. ;;;*************************************************************************

  70. (defun PopupMenus-ListAll (mgroup / pm out)
  71.   (if (setq pm (ASW-PopupMenus mgroup))
  72.                 (vlax-for each pm
  73.                         (setq out (cons (vla-get-Name each) out))
  74.                 )
  75.         )
  76.         out
  77. )

  78. ;;;*************************************************************************
  79. ;;; DESCRIPTION: Returns popupmenu object from specified menugroup object
  80. ;;;*************************************************************************

  81. (defun PopupMenu (mgroup popname)
  82.         (vla-item (ASW-PopupMenus mgroup) popname)
  83. )

  84. ;;;*************************************************************************
  85. ;;; MODULE: PopupMenu-ListSubs
  86. ;;; DESCRIPTION: Returns list of submenu captions (not labels) for popupmenu object
  87. ;;; ARGS: popupmenu-object
  88. ;;; EXAMPLE: (ASW-PopupMenu myPopMenu) --> ("File" "Edit" "View" "Draw" "Modify"...)
  89. ;;;*************************************************************************

  90. (defun PopupMenu-ListSubs (oPopupMenu / i out)
  91.         (setq i 0)
  92.         (repeat (vla-get-Count oPopupMenu)
  93.                 (setq out
  94.                                                 (cons
  95.                                                         (vla-get-Caption (vla-Item oPopupMenu i))
  96.                                                         out
  97.                                                 )
  98.                                         i (1+ i)
  99.                 )
  100.         ); repeat
  101.         (if out (reverse out))
  102. )

  103. ; IAcadPopupMenu: An AutoCAD cascading menu
  104. ;
  105. ; Property values:
  106. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 00a876f8>
  107. ;   Count (RO) = 20
  108. ;   Name = "&ShipWorks"
  109. ;   NameNoMnemonic (RO) = "ShipWorks"
  110. ;   OnMenuBar (RO) = -1
  111. ;   Parent (RO) = #<VLA-OBJECT IAcadPopupMenus 00f648b4>
  112. ;   ShortcutMenu (RO) = 0
  113. ;   TagString (RO) = "ID_ASW000"
  114. ; Methods supported:
  115. ;   AddMenuItem (3)
  116. ;   AddSeparator (1)
  117. ;   AddSubMenu (2)
  118. ;   InsertInMenuBar (1)
  119. ;   Item (1)
  120. ;   RemoveFromMenuBar ()

  121. ; IAcadPopupMenuItem: A single menu item on an AutoCAD pull-down menu
  122. ; Property values:
  123. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 00a876f8>
  124. ;   Caption (RO) = "File..."
  125. ;   Check = 0
  126. ;   Enable = -1
  127. ;   EndSubMenuLevel = 0
  128. ;   HelpString = ""
  129. ;   Index (RO) = 0
  130. ;   Label = "File..."
  131. ;   Macro = ""
  132. ;   Parent (RO) = #<VLA-OBJECT IAcadPopupMenu 00ecc9f8>
  133. ;   SubMenu (RO) = #<VLA-OBJECT IAcadPopupMenu 00ecc998>
  134. ;   TagString = ""
  135. ;   Type (RO) = 2
  136. ; Methods supported:
  137. ;   Delete ()

  138. ; IAcadPopupMenuItem: A single FLY-OUT menu item on an AutoCAD pull-down menu
  139. ; Property values:
  140. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 00a876f8>
  141. ;   Caption (RO) = "Fast-Plot..."
  142. ;   Check = 0
  143. ;   Enable = -1
  144. ;   EndSubMenuLevel = 0
  145. ;   HelpString = "Execute one-click plot to selected device: FPLOT"
  146. ;   Index (RO) = 5
  147. ;   Label = "Fast-Plot..."
  148. ;   Macro = "\003\003\020FPLOT "
  149. ;   Parent (RO) = #<VLA-OBJECT IAcadPopupMenu 00ecc9f8>
  150. ;   SubMenu (RO) = Exception occurred
  151. ;   TagString = "ID_Print1"
  152. ;   Type (RO) = 0
  153. ; Methods supported:
  154. ;   Delete ()

  155. ;;;*************************************************************************
  156. ;;; MODULE: PopupMenu-SubMenu
  157. ;;; DESCRIPTION: Returns submenu object for given submenu within a PopupMenu object
  158. ;;; ARGS: popupmenu-object, submenu-name
  159. ;;; EXAMPLE: (ASW-PopupMenu-SubMenu myPopMenu "Flyout1...")
  160. ;;;*************************************************************************

  161. (defun PopupMenu-SubMenu
  162.         (oPopupMenu subname / tries out looked found)
  163.        
  164.         (setq tries (vla-get-Count oPopupMenu) looked 0)
  165.        
  166.         (while
  167.                 (and
  168.                         (< looked tries)
  169.                         (not found)
  170.                 )
  171.                 (if (= subname (vla-get-Label (vla-item oPopupMenu looked)))
  172.                         (progn
  173.                                 (setq found T)
  174.                                 (vla-get-SubMenu (vla-item oPopupMenu looked))
  175.                         )
  176.                         (setq looked (1+ looked))
  177.                 )
  178.         )
  179. )

  180. ;;;*************************************************************************
  181. ;;; MODULE: Toolbars
  182. ;;; DESCRIPTION: Returns toolbars collection object for specified menugroup
  183. ;;; ARGS: menugroup-name (string)
  184. ;;; EXAMPLE: (ASW-Toolbars "ASW2K") --> [vla-object]
  185. ;;;*************************************************************************

  186. (defun Toolbars (mgroup / mg)
  187.         (if (setq mg (ASW-MenuGroup mgroup))
  188.                 (vla-get-Toolbars mg)
  189.                 (princ (strcat "\nMenugroup not found: " mgroup))
  190.         )
  191. )

  192. ;;;*************************************************************************
  193. ;;; MODULE: Toolbars-ListAll
  194. ;;; DESCRIPTION: Returns list of toolbar names for specified menugroup
  195. ;;; ARGS: menugroup-name (string)
  196. ;;; EXAMPLE: (ASW-Toolbars-ListAll "ASW2K") --> ("Toolbar1" "Toolbar2" ...)
  197. ;;;*************************************************************************

  198. (defun Toolbars-ListAll (mgroup / tb out)
  199.   (if (setq tb (ASW-Toolbars mgroup))
  200.                 (vlax-for each tb
  201.                         (setq out (cons (vla-get-name each) out))
  202.                 )
  203.         )
  204.         out
  205. )

  206. ;;;*************************************************************************
  207. ;;; MODULE: Toolbar-Exists-p
  208. ;;; DESCRIPTION: Returns T if toolbar exists within name menugroup toolbar collection
  209. ;;; ARGS: menugroup-name, toolbar-name
  210. ;;; EXAMPLE: (ASW-Toolbar-Exists-p "ASW2K" "ASW: Sheets") returns T
  211. ;;;*************************************************************************

  212. (defun Toolbar-Exists-p (mgroup tbname)
  213.         (and
  214.                 (ASW-MenuGroup mgroup)
  215.                 (ASW-Toolbar mgroup tbname)
  216.         )
  217. )

  218. ;;;*************************************************************************
  219. ;;; MODULE: Toolbar
  220. ;;; DESCRIPTION: Returns vla-object to a named toolbar within a named menugroup
  221. ;;; ARGS: menugroup-name, toolbar-name
  222. ;;; EXAMPLE: (ASW-Toolbar myMenuGroup "ASW: Sheets") --> [vla-object]
  223. ;;;*************************************************************************

  224. (defun Toolbar (mgroup tbname / loc)
  225.   (vla-item (ASW-Toolbars mgroup) tbname)
  226. )

  227. ; Property values:
  228. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 00a876f8>
  229. ;   Count (RO) = 0
  230. ;   DockStatus (RO) = 4
  231. ;   FloatingRows = 1
  232. ;   Height (RO) = 52
  233. ;   HelpString = ""
  234. ;   LargeButtons (RO) = 0
  235. ;   left = 212
  236. ;   Name = "Foo"
  237. ;   Parent (RO) = #<VLA-OBJECT IAcadToolbars 00f6b924>
  238. ;   TagString (RO) = "ID_Foo_0"
  239. ;   top = 186
  240. ;   Visible = -1
  241. ;   Width (RO) = 27
  242. ; Methods supported:
  243. ;   AddSeparator (1)
  244. ;   AddToolbarButton (5)
  245. ;   Delete ()
  246. ;   Dock (1)
  247. ;   Float (3)
  248. ;   Item (1)

  249. ;;;*************************************************************************
  250. ;;; MODULE: Toolbar-Add
  251. ;;; DESCRIPTION: Adds toolbar to given menugroup, returns toolbar object
  252. ;;; ARGS: menugroup-name, toolbar-name
  253. ;;; EXAMPLE: (ASW-Toolbar-Add "ASW2K" "MyToolbar1")
  254. ;;;*************************************************************************

  255. (defun Toolbar-Add (mgroup name)
  256.         (vla-Add (ASW-Toolbars mgroup) name)
  257. )

  258. ;;;*************************************************************************
  259. ;;; MODULE: Toolbar-Delete
  260. ;;; DESCRIPTION: Removes named toolbar from menugroup object collection
  261. ;;; ARGS: menugroup-name, toolbar-name
  262. ;;; EXAMPLE: (ASW-Toolbar-Delete "ASW2K" "MyToolbar1")
  263. ;;;*************************************************************************

  264. (defun Toolbar-Delete (mgroup tbname / tb)
  265.         (if (setq tb (ASW-Toolbar mgroup tbname))
  266.                 (vla-Delete tb)
  267.         )
  268. )

  269. ;;;*************************************************************************
  270. ;;; MODULE: Toolbar-ButtonNames
  271. ;;; DESCRIPTION: Returns list of button names for a given toolbar object
  272. ;;; ARGS: toolbar (vla-object)
  273. ;;; EXAMPLE: (ASW-Toolbar-ButtonNames myToolbar) --> ("Button1" "Button2" ...)
  274. ;;;*************************************************************************

  275. (defun Toolbar-ButtonNames (tbobject / i out)
  276.         (setq i 0)
  277.         (repeat (vla-get-count tbobject)
  278.                 (setq out (cons (vla-get-Name (vla-Item tbobject i)) out))
  279.                 (setq i (1+ i))
  280.         )
  281.         out
  282. )

  283. ;;;*************************************************************************
  284. ;;; MODULE: Toolbar-Button
  285. ;;; DESCRIPTION: Returns button object from given toolbar using button name
  286. ;;; ARGS: toolbar (vla-object), button-name (string)
  287. ;;; EXAMPLE: (ASW-Toolbar-Button myToolbar "Button1")
  288. ;;;*************************************************************************

  289. (defun Toolbar-Button (tbobject btname / out)
  290.         (vla-Item tbobject btname)
  291. )

  292. ; IAcadToolbarItem: A single button item on an AutoCAD toolbar
  293. ; Property values:
  294. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 00a876f8>
  295. ;   Flyout (RO) = AutoCAD: The toolbar item is not a flyout button
  296. ;   HelpString = "Insert a plain or reducing coupling: CPL"
  297. ;   Index (RO) = 0
  298. ;   Macro = "\003\003\020(ASWLF (list '(c:pff07 "pff07")))\npff07 "
  299. ;   Name = "Coupling"
  300. ;   Parent (RO) = #<VLA-OBJECT IAcadToolbar 00f676bc>
  301. ;   TagString = "ID_ASWP023"
  302. ;   Type (RO) = 0
  303. ; Methods supported:
  304. ;   AttachToolbarToFlyout (2)
  305. ;   Delete ()
  306. ;   GetBitmaps (2)
  307. ;   SetBitmaps (2)

  308. ;;;*************************************************************************
  309. ;;; MODULE: Toolbar-ButtonAdd
  310. ;;; DESCRIPTION: Add new button to given toolbar object, returns button object
  311. ;;; ARGS: toolbar-object, button-name, macro-string, bitmap-name, tagstring, helpstring
  312. ;;; EXAMPLE: (ASW-Toolbar-ButtonAdd myToolbar "Button1" "\003\003\020\nLine" "ICON_16_LINE" "Button001" "Draws a line: LINE")
  313. ;;;*************************************************************************

  314. (defun Toolbar-ButtonAdd
  315.         (tbobject name macro bitmap1 tagstring helpstring / newButton index)
  316.         (setq index (vla-get-Count tbobject))
  317.         (cond
  318.                 ( (setq newButton (vla-AddToolbarButton tbobject
  319.                                                                                                 (vlax-make-variant index vlax-vbInteger)
  320.                                                                                                 name
  321.                                                                                                 helpstring
  322.                                                                                                 macro
  323.                                                                                         )
  324.                         )
  325.                   (vla-put-TagString newButton tagstring)
  326.                   (vla-SetBitMaps newButton bitmap1 bitmap1)
  327.                   newButton
  328.                 )
  329.         )
  330. )

  331. (defun C:ADDTB ( / tb buttons)
  332.         (if
  333.                 (or
  334.                         (setq tb (ASW-Toolbar G$APP "Foo"))
  335.                         (setq tb (ASW-Toolbar-Add G$APP "Foo"))
  336.                 )
  337.                 (progn
  338.                         (setq buttons (vla-get-Count tb))
  339.                         (ASW-Toolbar-ButtonAdd tb (strcat "Button" (itoa buttons))
  340.                                 "\003\003\020\nLINE"
  341.                                 "ICON_16_LINE"
  342.                                 (strcat "FooButton" (itoa buttons))
  343.                                 "Draws a line: LINE"
  344.                         )
  345.                 )
  346.         )
  347.         (princ)
  348. )

  349. (defun C:DELTB ( / tb buttons)
  350.         (if (setq tb (ASW-Toolbar G$APP "Foo"))
  351.                 (progn
  352.                         (vla-Delete tb)
  353.                         (vlax-release-object tb)
  354.                 )
  355.         )
  356.         (princ)
  357. )

  358. ;;;*************************************************************************
  359. ;;; MODULE: Toolbar-ButtonDelete
  360. ;;; DESCRIPTION: Removes named button from given toolbar object
  361. ;;; ARGS: toolbar-object, button-name
  362. ;;; EXAMPLE: (ASW-Toolbar-ButtonDelete myToolbar "Button1")
  363. ;;;*************************************************************************

  364. (defun Toolbar-ButtonDelete (tbobject name / btn)
  365.         (if (setq btn (ASW-Toolbar-Button tbobject name))
  366.                 (progn
  367.                         (vla-Delete btn)
  368.                         (vlax-release-object btn)
  369.                 )
  370.         )
  371. )

  372. ;;;*************************************************************************
  373. ;;; MODULE: Toolbar-Show
  374. ;;; DESCRIPTION: Un-Hides a named toolbar
  375. ;;; ARGS: menugroup-name, toolbar-name
  376. ;;; EXAMPLE: (ASW-Toolbar-Show "ASW2K" "ASW: Sheets")
  377. ;;;*************************************************************************

  378. (defun Toolbar-Show (mgroup tbname / tb)
  379.   (if (setq tb (ASW-Toolbar mgroup tbname))
  380.           (if (= (vla-get-Visible tb) :vlax-False)
  381.                         (progn
  382.                                 (vla-put-Visible tb :vlax-True)
  383.                                 T
  384.                         )
  385.                 )
  386.         )
  387. )

  388. ;;;*************************************************************************
  389. ;;; MODULE: Toolbar-Hide
  390. ;;; DESCRIPTION: Hides a named toolbar
  391. ;;; ARGS: menugroup-name, toolbar-name
  392. ;;; EXAMPLE: (ASW-Toolbar-Hide "ASW2K" "ASW: Sheets")
  393. ;;;*************************************************************************

  394. (defun Toolbar-Hide (mgroup tbname / tb)
  395.   (if (setq tb (ASW-Toolbar mgroup tbname))
  396.           (if (= (vla-get-Visible tb) :vlax-True)
  397.                         (progn
  398.                           (vla-put-Visible tb :vlax-False)
  399.                                 T
  400.                         )
  401.                 )
  402.         )
  403. )

  404. ;;;*************************************************************************
  405. ;;; MODULE: Toolbar-Dock
  406. ;;; DESCRIPTION: Dock named toolbar in one of four locations
  407. ;;; ARGS: menugroup-name, toolbar-name, location (acToolbarDockTop, acToolbarDockBottom, acToolbarDockLeft, acToolbarDockRight)
  408. ;;; EXAMPLE: (ASW-Toolbar-Dock "ASW2K" "Sheets" 2) --> docks on left side of window
  409. ;;;*************************************************************************;;;

  410. (defun Toolbar-Dock (mgroup tbname dock / tb)
  411.   (if (setq tb (ASW-Toolbar mgroup tbname))
  412.           (if (= (vla-get-Visible tb) :vlax-True)
  413.                         (if (member dock '(0 1 2 3))
  414.                                 (progn
  415.                                         (vla-Dock tb dock)
  416.                                         1
  417.                                 )
  418.                                 -2 ;; invalid parameter value
  419.                         )
  420.                         -1 ;; toolbar not visible
  421.           )
  422.                 0 ;; toolbar not found
  423.         )
  424. )

  425. ;;;*************************************************************************
  426. ;;; MODULE: Toolbar-DockTop
  427. ;;; DESCRIPTION: Dock named toolbar at top of screen
  428. ;;; ARGS: menugroup-name, toolbar-name
  429. ;;; EXAMPLE: (ASW-Toolbar-DockTop "ASW2K" "ASW: PowerPlot")
  430. ;;;*************************************************************************

  431. (defun Toolbar-DockTop (mgroup tbname)
  432.         (if (setq tbobject (ASW-Toolbar mgroup tbname))
  433.                 (vla-Dock tbobject acToolbarDockTop)
  434.                 (princ (strcat "\nToolbar (" tbname ") not found."))
  435.         )
  436. )

  437. ;;;*************************************************************************
  438. ;;; MODULE: Toolbar-DockBottom
  439. ;;; DESCRIPTION: Dock named toolbar at bottom of screen
  440. ;;; ARGS: menugroup-name, toolbar-name
  441. ;;; EXAMPLE: (ASW-Toolbar-DockBottom "ASW2K" "ASW: PowerPlot")
  442. ;;;*************************************************************************

  443. (defun Toolbar-DockBottom (mgroup tbname)
  444.         (if (setq tbobject (ASW-Toolbar mgroup tbname))
  445.                 (vla-Dock tbobject acToolbarDockBottom)
  446.                 (princ (strcat "\nToolbar (" tbname ") not found."))
  447.         )
  448. )

  449. ;;;*************************************************************************
  450. ;;; MODULE: Toolbar-DockLeft
  451. ;;; DESCRIPTION: Dock named toolbar at left of screen
  452. ;;; ARGS: menugroup-name, toolbar-name
  453. ;;; EXAMPLE: (ASW-Toolbar-DockLeft "ASW2K" "ASW: PowerPlot")
  454. ;;;*************************************************************************

  455. (defun Toolbar-DockLeft (mgroup tbname)
  456.         (if (setq tbobject (ASW-Toolbar mgroup tbname))
  457.                 (vla-Dock tbobject acToolbarDockLeft)
  458.                 (princ (strcat "\nToolbar (" tbname ") not found."))
  459.         )
  460. )

  461. ;;;*************************************************************************
  462. ;;; MODULE: Toolbar-DockRight
  463. ;;; DESCRIPTION: Dock named toolbar at right of screen
  464. ;;; ARGS: menugroup-name, toolbar-name
  465. ;;; EXAMPLE: (ASW-Toolbar-DockRight "ASW2K" "ASW: PowerPlot")
  466. ;;;*************************************************************************

  467. (defun Toolbar-DockRight (mgroup tbname)
  468.         (if (setq tbobject (ASW-Toolbar mgroup tbname))
  469.                 (vla-Dock tbobject acToolbarDockRight)
  470.                 (princ (strcat "\nToolbar (" tbname ") not found."))
  471.         )
  472. )

  473. ;;;*************************************************************************
  474. ;;; MODULE: Toolbar-Float
  475. ;;; DESCRIPTION: Position named toolbar at specified location
  476. ;;; ARGS: menugroup-name, toolbar-name, top-int, left-int, rows-int
  477. ;;; EXAMPLE: (ASW-Toolbar-Float "ASW2K" "Sheets" 200 300 1)
  478. ;;;*************************************************************************

  479. (defun Toolbar-Float (mgroup tbname top left rows)
  480.   (if (setq tb (ASW-Toolbar mgroup tbname))
  481.                 (if (= (vla-get-Visible tb) :vlax-True)
  482.                         (progn
  483.                                 (vla-Float tb top left rows)
  484.                                 1
  485.                         )
  486.                         -1 ;; toolbar not visible
  487.                 )
  488.                 0 ;; toolbar not found
  489.         )
  490. )

  491. ;;;*************************************************************************\
  492. ;;; MODULE: Menu-Locate
  493. ;;; DESCRIPTION: Returns full path+filename for named menu file
  494. ;;; ARGS: menu-filename (without extension)
  495. ;;; EXAMPLE: (ASW-Menu-Locate "asw2k")
  496. ;;;************************************************************************;;;

  497. (defun MENU-LOCATE (mnfn)
  498.         (DPR "\n(ASW-MENU-LOAD)")
  499.        
  500.         (cond
  501.                 ;( (findfile (strcat mnfn ".mnc")) )
  502.                 ;( (findfile (strcat mnfn ".mns")) )
  503.                 ( (findfile (strcat mnfn ".mnu")) )
  504.                 ( (findfile (strcat G$MENU "\" mnfn ".mnu")) )
  505.                 ( (findfile (strcat G$ASL  "\" mnfn ".mnu")) )
  506.                 ( (findfile (strcat G$SYS "\\Menu\" mnfn ".mnu")) )
  507.                 ( T nil )
  508.         )
  509. )

  510. ;;;********************************************************************
  511. ;;; Force menu reload/recompile
  512. ;;;********************************************************************

  513. (if (null C:UPDATE)
  514.         (defun C:UPDATE ()
  515.                 (load "update.vlx")
  516.                 (C:UPDATE)
  517.                 (princ)
  518.         )
  519. )

  520. ;;;*************************************************************************
  521. ;;; MODULE: Menu-ReLoadAll
  522. ;;; DESCRIPTION: Reloads and repositions (merges) all ShipWorks menu stubs
  523. ;;; ARGS: none
  524. ;;; EXAMPLE: (ASW-Menu-ReLoadAll)
  525. ;;;********************************************************************

  526. (defun MENU-RELOADALL ( / cmdstr appkey local_copy client-menu)
  527.         (DPR "\n(ASW-MENU-RELOADALL)")
  528.         (setq client-menu (vl-filename-base G$PRO))
  529.         (setq cmdstr (strcat "COPY " G$MENU "\\ASW2K.MNU " G$DAT "\\ASW2K.MNU"))
  530.         (vl-cmdf "SHELL" cmdstr)
  531.         (setq cmdstr (strcat "COPY " G$ASL "\" G$APP ".MNU " G$DAT "\" G$APP ".MNU"))
  532.         (vl-cmdf "SHELL" cmdstr)
  533.         (cond
  534.                 ( (findfile (strcat G$MENU "\" client-menu ".MNU"))
  535.                   (setq cmdstr (strcat "COPY " G$MENU "\" client-menu ".MNU " G$DAT "\" client-menu ".MNU"))
  536.                   (vl-cmdf "SHELL" cmdstr)
  537.                 )
  538.         )
  539.                
  540.         (princ "\nMenus downloaded to client folder.")
  541.         (cond
  542.                 ( (menugroup "ASW2K")
  543.                   (DPR "\nRemoving base services menu stub...")
  544.                   (vl-cmdf "MENUUNLOAD" "ASW2K")
  545.           )
  546.         )
  547.         (cond
  548.                 ( (setq local_copy (findfile (strcat G$DAT "\\asw2k.mnu")))
  549.                   (vl-cmdf "MENULOAD" local_copy)
  550.                         (if (menugroup "ASW2K")
  551.                                 (menucmd "P4=+ASW2K.POP1")
  552.                                 (princ "\nFailed (1)!")
  553.                         )
  554.           )
  555.           ( T (princ "\nFailed (2)!") )
  556.         )
  557.        
  558.         (cond
  559.                 ( (menugroup G$APP)
  560.                   (foreach appkey '("ASW2K-S" "ASW2K-E" "ASW2K-P" "ASW2K-V")
  561.                                 (if (menugroup appkey)
  562.                                         (vl-cmdf "MENUUNLOAD" appkey)
  563.                                 )
  564.                         )
  565.                 )
  566.         )
  567.         (cond
  568.                 ( (setq local_copy (findfile (strcat G$DAT "\" G$APP ".mnu")))
  569.                   (vl-cmdf "MENULOAD" local_copy)
  570.                   (if (menugroup G$APP)
  571.                           (menucmd (strcat "P5=+" G$APP ".POP1"))
  572.                                 (princ "\nFailed (3)!")
  573.                         )
  574.                 )
  575.                 ( T
  576.                   (princ "\nFailed (4)!")
  577.                 )
  578.         )
  579.         (cond
  580.                 ( (menugroup client-menu)
  581.                   (DPR "\nRemoving client-specific menu stub...")
  582.                   (vl-cmdf "MENUUNLOAD" client-menu)
  583.                 )
  584.         )
  585.         (cond
  586.                 ( (setq local_copy (findfile (strcat G$DAT "\" client-menu ".mnu")))
  587.                   (vl-cmdf "MENULOAD" local_copy)
  588.                   (if (menugroup client-menu)
  589.                           (menucmd (strcat "P6=+" client-menu ".POP1"))
  590.                                 (princ "\nFailed (5)!")
  591.                         )
  592.                 )
  593.                 ( T
  594.                   (princ "\nFailed (6)!")
  595.                 )
  596.         )
  597. )

  598. ;;;*************************************************************************
  599. ;;; MODULE: MenuMerge
  600. ;;; DESCRIPTION: Loads and positions all ShipWorks menu stubs
  601. ;;; ARGS: none
  602. ;;; EXAMPLE: (ASW-MenuMerge)
  603. ;;;********************************************************************

  604. (defun MenuMerge
  605.         ( / local_copy remote_copy client-menu)
  606.   (DPR "\n(ASW-MenuMerge)")
  607.         (cond
  608.                 ( (menugroup "ASW2K")
  609.                   (vl-cmdf "MENUUNLOAD" "ASW2K")
  610.                   (if (setq local_copy (findfile (strcat G$DAT "\\asw2k.mnu")))
  611.                                 (vl-File-Delete local_copy)
  612.                         )
  613.                   (vl-File-Copy (strcat G$MENU "\\asw2k.mnu") (strcat G$DAT "\\asw2k.mnu"))
  614.                   (if (setq local_copy (findfile (strcat G$DAT "\\asw2k.mnu")))
  615.                           (progn
  616.                                         (vl-cmdf "MENULOAD" local_copy)
  617.                                         (menucmd "P4=+ASW2K.POP1")
  618.                                 )
  619.                                 (princ "\nFailed to reload new base menu update.")
  620.                         )
  621.                 )
  622.                 ;; Cond-2: Local MNU exists, load it
  623.                 ( (and
  624.                                 (not (menugroup "ASW2K"))
  625.                                 (setq local_copy (findfile (strcat G$DAT "\\asw2k.mnu")))
  626.                         )
  627.                   (DPR "\nReloading from local directory...")
  628.                   (vl-cmdf "MENULOAD" local_copy)
  629.                   (if (menugroup "ASW2K")
  630.                                 (menucmd "P4=+ASW2K.POP1")
  631.                                 (princ "\nFailed to load local copy of ShipWorks Base menu.")
  632.                         )
  633.                 )
  634.                 ;; Cond-3: Remote MNU exists, copy to local, load local copy
  635.                 ( (and
  636.                                 (not (menugroup "ASW2K"))
  637.                                 (setq remote_copy (findfile (strcat G$MENU "\\asw2k.mnu")))
  638.                                 (vl-File-Copy remote_copy (strcat G$DAT "\\asw2k.mnu"))
  639.                                 (setq local_copy (findfile (strcat G$DAT "\\asw2k.mnu")))
  640.                         )
  641.                   ;(vl-cmdf "delay" 400)
  642.                   (DPR "\nReloading from new download copy...")
  643.                         (vl-cmdf "MENULOAD" local_copy)
  644.                   (if (menugroup "ASW2K")
  645.                                 (menucmd "P4=+ASW2K.POP1")
  646.                                 (princ "\nFailed to load remote copy of ShipWorks Base menu.")
  647.                         )
  648.                 )
  649.                 ;; Cond-4: Horrible failure, cry in shame
  650.                 ( T (princ "\nSystem failure: Unable to download server menu update."))
  651.         ); cond
  652.         (setq remote_copy nil local_copy nil)
  653.         (cond
  654.                 ( (menugroup G$APP)
  655.                   (vl-cmdf "MENUUNLOAD" G$APP)
  656.                   (if (setq local_copy (findfile (strcat G$DAT "\" G$APP ".mnu")))
  657.                                 (vl-File-Delete local_copy)
  658.                         )
  659.                   (vl-File-Copy (strcat G$ASL "\" G$APP ".mnu") (strcat G$DAT "\" G$APP ".mnu"))
  660.                   (if (setq local_copy (findfile (strcat G$DAT "\" G$APP ".mnu")))
  661.                           (progn
  662.                                         (vl-cmdf "MENULOAD" local_copy)
  663.                                         (menucmd (strcat "P5=+" G$APP ".POP1"))
  664.                                 )
  665.                                 (princ "\nFailed to reload new extended services menu update.")
  666.                         )
  667.                 );; Cond-2: Local MNU exists, load it
  668.                 ( (and
  669.                                 (not (menugroup G$APP))
  670.                                 (setq local_copy (findfile (strcat G$DAT "\" G$DAT ".mnu")))
  671.                         )
  672.                   (DPR "\nReloading from local directory...")
  673.                         (vl-cmdf "MENULOAD" local_copy)
  674.                         (if (menugroup G$APP)
  675.                                 (menucmd (strcat "P5=+" G$APP ".POP1"))
  676.                                 (princ "\nFailed to load local copy of extended services menu.")
  677.                         )
  678.                 )
  679.                 ;; Cond-3: Remote MNU exists, copy to local, load local copy
  680.                 ( (and
  681.                                 (not (menugroup G$APP))
  682.                                 (setq remote_copy (findfile (strcat G$ASL "\" G$APP ".mnu")))
  683.                                 (vl-File-Copy remote_copy (strcat G$DAT "\" G$APP ".mnu"))
  684.                                 (setq local_copy (findfile (strcat G$DAT "\" G$APP ".mnu")))
  685.                         )
  686.                   ;(vl-cmdf "delay" 400)
  687.                   (DPR "\nReloading from downloaded copy...")
  688.                   (vl-cmdf "MENULOAD" local_copy)
  689.                   (if (menugroup G$APP)
  690.                           (menucmd (strcat "P5=+" G$APP ".POP1"))
  691.                                 (princ "\nFailed to load remote copy of extended services menu.")
  692.                         )
  693.                 )
  694.                 ;; Cond-4: Oh my God, two failures?  What a shame
  695.                 ( T (princ "\nSystem Failure: Unable to download server menu update.") )
  696.         ); cond
  697.         (DPR "\nChecking for project-based client menus...")
  698.         (setq client-menu (vl-filename-base G$PRO))
  699.         (cond
  700.                 ( (menugroup client-menu)
  701.                   (vl-cmdf "MENUUNLOAD" client-menu)
  702.                   (if (setq local_copy (findfile (strcat G$DAT "\" client-menu ".mnu")))
  703.                                 (vl-File-Delete local_copy)
  704.                         )
  705.                   (vl-File-Copy (strcat G$MENU "\" G$APP ".mnu") (strcat G$DAT "\" client-menu ".mnu"))
  706.                   (if (setq local_copy (findfile (strcat G$DAT "\" client-menu ".mnu")))
  707.                           (progn
  708.                                         (vl-cmdf "MENULOAD" local_copy)
  709.                                         (menucmd (strcat "P6=+" client-menu ".POP1"))
  710.                                 )
  711.                                 (princ "\nFailed to reload new client-specific menu update.")
  712.                         )
  713.                 );; Cond-2: Local MNU exists, load it
  714.                 ( (and
  715.                                 (not (menugroup client-menu))
  716.                                 (setq local_copy (findfile (strcat G$DAT "\" client-menu ".mnu")))
  717.                         )
  718.                   (DPR "\nReloading from local directory...")
  719.                         (vl-cmdf "MENULOAD" local_copy)
  720.                         (if (menugroup client-menu)
  721.                                 (menucmd (strcat "P6=+" client-menu ".POP1"))
  722.                                 (princ "\nFailed to load local copy of client-specific menu.")
  723.                         )
  724.                 )
  725.                 ;; Cond-3: Remote MNU exists, copy to local, load local copy
  726.                 ( (and
  727.                                 (not (menugroup client-menu))
  728.                                 (setq remote_copy (findfile (strcat G$MENU "\" client-menu ".mnu")))
  729.                                 (vl-File-Copy remote_copy (strcat G$DAT "\" client-menu ".mnu"))
  730.                                 (setq local_copy (findfile (strcat G$DAT "\" client-menu ".mnu")))
  731.                         )
  732.                   ;(vl-cmdf "delay" 400)
  733.                   (DPR "\nReloading from downloaded copy...")
  734.                   (vl-cmdf "MENULOAD" local_copy)
  735.                   (if (menugroup client-menu)
  736.                           (menucmd (strcat "P6=+" client-menu ".POP1"))
  737.                                 (princ "\nFailed to load remote copy of client-specific menu.")
  738.                         )
  739.                 )
  740.                 ;; Cond-4: Oh my God, two failures?  What a shame
  741.                 ( T (princ "\nSystem Failure: Unable to download server menu update.") )
  742.         )       
  743.         (DPR "\nSearching for Express Tools stub menu to load...")
  744.        
  745.   (cond
  746.     ( (and
  747.         (not (menugroup "EXPRESS"))
  748.                                 (or
  749.                 (setq expmn (findfile "acetmain.mnu"))
  750.                                         (setq expmn (findfile "express.mnu"))
  751.                                 )
  752.                         )
  753.                   (princ "\nLoading AutoCAD Express Tools menus...")
  754.       (vl-cmdf "_.MENULOAD" expmn)
  755.       (if (menugroup "EXPRESS")
  756.         (menucmd "P9=+EXPRESS.POP1")
  757.         (alert "Failed to load Express Tools menus...")
  758.       )
  759.     )
  760.   )
  761. ); defun

  762. ;;;*************************************************************************
  763. ;;; MODULE: Menu-DeleteFiles
  764. ;;; DESCRIPTION: Deletes all four extension-type files for named menu file
  765. ;;; ARGS: basename (without extension), pathname
  766. ;;; EXAMPLE: (ASW-Menu-DeleteFiles "mymenu" "c:\\mystuff")
  767. ;;;*************************************************************************

  768. (defun MENU-DeleteFiles
  769.         (menubase pathname / mnuext mnu)
  770.         (DPR "\n(ASW-MENU-DeleteFiles)")
  771.         (foreach mnuext '(".mnu" ".mns" ".mnc" ".mnr")
  772.                 (if (setq mnu (findfile (strcat pathname "\" menubase mnuext)))
  773.                         (progn
  774.                                 (DPR (strcat "\nDeleting menu file: " mnu))
  775.                                 (vl-File-Delete mnu)
  776.                         )
  777.                 )
  778.         )
  779. )

  780. ;;;*************************************************************************
  781. ;;; MODULE: Menu-CompareDates
  782. ;;; DESCRIPTION: Compare file dates, returns T if file1 is same or newer than file2
  783. ;;; ARGS: filename1, filename2
  784. ;;; EXAMPLE: (ASW-Menu-CompareDates localMenu serverMenu) returns T (filename1 is same or newer than filename2)
  785. ;;;*************************************************************************

  786. (defun Menu-CompareDates (f1 f2 / st1 st2)
  787.         (if
  788.           (and
  789.                         (setq f1 (findfile f1))
  790.                         (setq f2 (findfile f2))
  791.                         (setq st1 (vl-file-systime f1)); (2001 2 2 13 10 53 12 855)
  792.                         (setq st2 (vl-file-systime f2)); (2001 2 2 13 10 53 12 855)
  793.                 )
  794.                 (if (> (nth 0 st1) (nth 0 st2));; newer year?
  795.                         T
  796.                         (if (= (nth 0 st1) (nth 0 st2));; same year?
  797.                                 (if (> (nth 1 st1) (nth 1 st2));; newer month?
  798.                                         T
  799.                                         (if (> (nth 3 st1) (nth 3 st2));; newer day of month?
  800.                                                 T
  801.                                                 (if (= (nth 3 st1) (nth 3 st2));; same day of month?
  802.                                                         (if (> (nth 4 st1) (nth 4 st2));; newer hour of day?
  803.                                                                 T
  804.                                                                 (if (= (nth 4 st1) (nth 4 st2));; same hour of day?
  805.                                                                         (if (>= (nth 5 st1) (nth 5 st1));; newer minutes of same hour?
  806.                                                                                 T
  807.                                                                         )
  808.                                                                 )
  809.                                                         )
  810.                                                 )
  811.                                         )
  812.                                 )
  813.                         )
  814.                 )
  815.         )
  816. )

  817. ;;;*************************************************************************
  818. ;;; MODULE: Menu-CheckDates
  819. ;;; DESCRIPTION: Compare menu filenames dates between two folders
  820. ;;; ARGS: none
  821. ;;; EXAMPLE:
  822. ;;;*************************************************************************

  823. (defun Menu-CheckDates
  824.         (forceload / choice fail)
  825.         (DPR "\n(ASW-Menu-CheckDates)")
  826.         (cond
  827.                 ( (not
  828.                                 (ASW-Menu-CompareDates
  829.                                         (strcat G$DAT "\\asw2k.mnu")
  830.                                         (strcat G$MENU "\\asw2k.mnu")
  831.                                 )
  832.                         )
  833.                   (setq fail 1)
  834.                 )
  835.         )
  836.         (cond
  837.                 ( (not
  838.                                 (ASW-Menu-CompareDates
  839.                                         (strcat G$DAT "\" G$APP ".mnu")
  840.                                         (strcat G$ASL "\" G$APP ".mnu")
  841.                                 )
  842.                         )
  843.                   (if fail
  844.                                 (setq fail 2)
  845.                                 (setq fail -1)
  846.                         )
  847.                 )
  848.         )
  849.         (cond
  850.                 ( (= fail 1) (DPR "\nBase menu failed comparison.") )
  851.                 ( (= fail 2) (DPR "\nBoth menus failed comparison.") )
  852.                 ( (= fail -1)(DPR "\nExtended menu failed comparison.") )
  853.                 ( T (DPR "\nMenus are up to date.") )
  854.         )
  855.         (cond
  856.                 ( (and fail (not forceload))
  857.                         (setq choice
  858.                                 (DOS_MsgBox
  859.                                         (strcat
  860.                                                         "One of your ShipWorks menus is out of date."
  861.                                                 "\nYou can update it now by picking the Yes"
  862.                                                 "\nbutton, or pick No to defer until later.\n"
  863.                                                 "\nIf you defer now, you will be reminded each"
  864.                                                 "\ntime you open a drawing until you update."
  865.                                         )
  866.                                         "ShipWorks Menu Update"
  867.                                         4 3
  868.                                 )
  869.                         )
  870.                   (if (= 6 choice)
  871.                                 (ASW-MENU-RELOADALL)
  872.                                 (princ "\nShipWorks menu update notice deferred.")
  873.                         )
  874.                 )
  875.         )
  876. )

  877. ;;;*************************************************************************
  878. ;;; MODULE: Toolbars-HideAll
  879. ;;; DESCRIPTION: Hide all toolbars related to specified menugroup
  880. ;;; ARGS: menugroup-name
  881. ;;; EXAMPLE: (ASW-Toolbars-HideAll "ASW2K")
  882. ;;;*************************************************************************

  883. (defun Toolbars-HideAll (mgroup / tbars)
  884.         (cond
  885.                 ( (setq tbars (asw-toolbars-listall mgroup))
  886.                   (foreach tbar tbars
  887.                                 (ASW-Toolbar-Hide mgroup tbar)
  888.                         )
  889.                 )
  890.         )
  891. )

  892. ;;;*************************************************************************
  893. ;;; MODULE: Toolbars-ShowAll
  894. ;;; DESCRIPTION: Show all toolbars related to specified menugroup
  895. ;;; ARGS: menugroup-name
  896. ;;; EXAMPLE: (ASW-Toolbars-ShowAll "ASW2K")
  897. ;;;*************************************************************************

  898. (defun Toolbars-ShowAll (mgroup / tbars)
  899.         (cond
  900.                 ( (setq tbars (asw-toolbars-listall mgroup))
  901.                   (foreach tbar tbars
  902.                                 (ASW-Toolbar-Show mgroup tbar)
  903.                         )
  904.                 )
  905.         )
  906. )

  907. ;;;*************************************************************************
  908. ;;; MODULE: Toolbars-Hidden
  909. ;;; DESCRIPTION: Returns list of toolbars that are hidden for a specified menugroup
  910. ;;; ARGS: menugroup-name
  911. ;;; EXAMPLE: (ASW-Toolbars-Hidden "ASW2K") returns ("toolbar1" "toolbar2"...)
  912. ;;;*************************************************************************

  913. (defun Toolbars-Hidden (mgroup / tbars each tbar)
  914.         (cond
  915.                 ( (setq tbars (ASW-Toolbars-ListAll mgroup))
  916.                   (foreach each tbars
  917.                                 (setq tbar (ASW-Toolbar mgroup each))
  918.                                 (if (= :vlax-True (vla-get-Visible tbar))
  919.                                         (setq out (cons (vla-get-name tbar) out))
  920.                                 )
  921.                         )
  922.                 )
  923.         )
  924. )

  925. ;;;*************************************************************************
  926. ;;; MODULE: C:TBOFF
  927. ;;; DESCRIPTION: Turns off ShipWorks toolbars
  928. ;;; ARGS: none
  929. ;;; EXAMPLE:
  930. ;;;*************************************************************************

  931. (defun C:TBOFF ( / hbars1 hbars2)
  932.         (setq G$TBOFF1 (KWORD '("A""V") "Hide All toolbars or Visible toolbars only..." G$TBOFF1 T))
  933.         (cond
  934.                 ( (= G$TBOFF1 "V")
  935.                   (setq G$TBOFF2 (ASW-Toolbars-Hidden "ASW2K"))
  936.                   (setq G$TBOFF3 (ASW-Toolbars-Hidden G$APP))
  937.                 )
  938.         )
  939.         (ASW-Toolbars-HideAll "ASW2K")
  940.         (ASW-Toolbars-HideAll G$APP)
  941.         (princ)
  942. )

  943. ;;;*************************************************************************
  944. ;;; MODULE: C:TBON
  945. ;;; DESCRIPTION: Turns on ShipWorks toolbars
  946. ;;; ARGS: none
  947. ;;; EXAMPLE:
  948. ;;;*************************************************************************

  949. (defun C:TBON ( / opt)
  950.         (cond
  951.                 ( (and G$TBOFF1 (= G$TBOFF1 "V") (or G$TBOFF2 G$TBOFF3))
  952.                   (setq opt (KWORD '("A""H") "Display All toolbars or only those Hidden before..." opt T))
  953.                   (cond
  954.                                 ( (= opt "A")
  955.                                         (ASW-Toolbars-ShowAll "ASW2K")
  956.                                         (ASW-Toolbars-ShowAll G$APP)
  957.                                 )
  958.                                 ( T
  959.                                   (if G$TBOFF2
  960.                                           (vlax-for each (ASW-Toolbars "ASW2K")
  961.                                                         (setq tbname (vla-get-name each))
  962.                                                         (if (member tbname G$TBOFF2)
  963.                                                                 (ASW-Toolbar-Show "ASW2K" tbname)
  964.                                                         )
  965.                                                 )
  966.                                         )
  967.                                   (if G$TBOFF3
  968.                                           (vlax-for each (ASW-Toolbars G$APP)
  969.                                                         (setq tbname (vla-get-name each))
  970.                                                         (if (member tbname G$TBOFF3)
  971.                                                                 (ASW-Toolbar-Show G$APP tbname)
  972.                                                         )
  973.                                                 )
  974.                                         )
  975.                                 )
  976.                         ); cond
  977.                 )
  978.                 ( T
  979.                         (ASW-Toolbars-ShowAll "ASW2K")
  980.                         (ASW-Toolbars-ShowAll G$APP)
  981.                 )
  982.         )
  983.         (princ)
  984. )

  985. ;;;*************************************************************************
  986. ;;; MODULE: Menu-SaveAll
  987. ;;; DESCRIPTION: Saves all ShipWorks menu settings to MNS or MNC files
  988. ;;; ARGS: menu-type ("mns" or "mnc") not case sensitive, nil = "mns"
  989. ;;; EXAMPLE: (ASW-Menu-SaveAll "mnc") returns nil
  990. ;;;*************************************************************************

  991. (defun MENU-SAVEALL (mtype)
  992.         (DPR "\n(ASW-MENU-SAVEALL)")
  993.         (vlax-for each (Get-MenuGroups)
  994.                 (if (wcmatch (strcase (vla-get-name each)) "ASW2K*")
  995.                         (if (= (strcase mtype) "MNC")
  996.                                 (vla-save each acMenuFileCompiled)
  997.                                 (vla-save each acMenuFileSource)
  998.                         )
  999.                 )
  1000.         )
  1001. )

  1002. ;;;*************************************************************************
  1003. ;;; MODULE: MenuUpdate-LoadClientMenus
  1004. ;;; DESCRIPTION: Loads client menu files as menugroups for ShipWorks session
  1005. ;;; ARGS: none
  1006. ;;; EXAMPLE:
  1007. ;;;*************************************************************************

  1008. (defun MenuUpdate-LoadClientMenus
  1009.         ( / mg svclist svcmnu)
  1010.         (ASW-PRINC "\n(ASW-MenuUpdate-LoadClientMenus)")
  1011.         (princ "\nLoading ShipWorks menugroups from client folder...")
  1012.         (setq svclist
  1013.                 '("ASW2K-E" "&Electrical" "ASW2K-P" "&Piping" "ASW2K-S" "&Structure" "ASW2K-V" "HVAC")
  1014.                                 svcmnu (cadr (member G$APP svclist))
  1015.         )
  1016.         (cond
  1017.                 ( (not (menugroup "asw2k"))
  1018.                   (if (setq mg (asw-menu-load "asw2k" (strcat G$DAT "\\asw2k.mnu")))
  1019.                                 (progn
  1020.                                         (if (ASW-PopMenu-Insert "asw2k" "&ShipWorks" 4)
  1021.                                                 (princ "\nBase menubar loaded from file.")
  1022.                                         )
  1023.                                         (vlax-release-object mg)
  1024.                                 )
  1025.                         )
  1026.                 )
  1027.                 ( T
  1028.                   (if (not (ASW-PopMenu-MenuBar-p "&ShipWorks"))
  1029.                                 (if (ASW-PopMenu-Insert "asw2k" "&ShipWorks" 4)
  1030.                                         (princ "\nBase menubar loaded.")
  1031.                                         (princ "\nFailed to get base popmenu from menugroup collection.")
  1032.                                 )
  1033.                         )
  1034.                 )
  1035.         )
  1036.         (if
  1037.                 (and
  1038.                         (/= G$APP "ASW2K-E")
  1039.                         (menugroup "ASW2K-E")
  1040.                 )
  1041.                 (ASW-Menu-UnLoad "ASW2K-E")
  1042.         )
  1043.         (if
  1044.                 (and
  1045.                         (/= G$APP "ASW2K-P")
  1046.                         (menugroup "ASW2K-P")
  1047.                 )
  1048.                 (ASW-Menu-Unload "ASW2K-P")
  1049.         )
  1050.         (if
  1051.                 (and
  1052.                         (/= G$APP "ASW2K-S")
  1053.                         (menugroup "ASW2K-S")
  1054.                 )
  1055.                 (ASW-Menu-Unload "ASW2K-S")
  1056.         )
  1057.         (if
  1058.                 (and
  1059.                         (/= G$APP "ASW2K-V")
  1060.                         (menugroup "ASW2K-V")
  1061.                 )
  1062.                 (ASW-Menu-Unload "ASW2K-V")
  1063.         )
  1064.         (cond
  1065.                 ( (not (menugroup G$APP))
  1066.                   (if (setq mg (asw-menu-load G$APP (strcat G$DAT "\" G$APP ".mnu")))
  1067.                                 (progn
  1068.                                         (if (ASW-PopMenu-Insert G$APP svcmnu 5)
  1069.                                                 (princ (strcat "\nService menubar loaded from file: " G$APP))
  1070.                                         )
  1071.                                         (vlax-release-object mg)
  1072.                                 )
  1073.                         )
  1074.                 )
  1075.                 ( T
  1076.                          (if (not (ASW-PopMenu-MenuBar-p svcmnu))
  1077.                                 (if (ASW-PopMenu-Insert G$APP svcmnu 5)
  1078.                                         (princ "\nServer menubar loaded.")
  1079.                                         (princ "\nFailed to get service popmenu from menugroup collection.")
  1080.                                 )
  1081.                         )
  1082.                 )
  1083.         )
  1084. )

  1085. ;;;*************************************************************************
  1086. ;;; MODULE: MenuUpdate-DeleteClientFiles
  1087. ;;; DESCRIPTION: Deletes client-side menu files for ShipWorks
  1088. ;;; ARGS: none
  1089. ;;; EXAMPLE:
  1090. ;;;*************************************************************************

  1091. (defun MenuUpdate-DeleteClientFiles
  1092.         ( / mfile)
  1093.         (ASW-PRINC "\n(ASW-MenuUpdate-DeleteClientFiles)")
  1094.         (foreach mext '(".mnu" ".mns" ".mnc" ".mnr")
  1095.                 (if (setq mfile (findfile (strcat G$DAT "\\asw2k" mext)))
  1096.                         (if (vl-file-delete mfile)
  1097.                                 (princ);(princ (strcat "\nDeleted menu file: " mfile))
  1098.                                 (princ (strcat "\nFailed to delete menu file: " mfile))
  1099.                         )
  1100.                 )
  1101.         )
  1102.         (foreach mext '(".mnu" ".mns" ".mnc" ".mnr")
  1103.                 (if (setq mfile (findfile (strcat G$DAT "\" G$APP mext)))
  1104.                         (if (vl-file-delete mfile)
  1105.                                 (princ);(princ (strcat "\nDeleted menu file: " mfile))
  1106.                                 (princ (strcat "\nFailed to delete menu file: " mfile))
  1107.                         )
  1108.                 )
  1109.         )
  1110. )

  1111. ;;;*************************************************************************
  1112. ;;; MODULE: MenuUpdate-UnloadMenus
  1113. ;;; DESCRIPTION: Unloads all ShipWorks menugroups
  1114. ;;; ARGS: none
  1115. ;;; EXAMPLE:
  1116. ;;;*************************************************************************

  1117. (defun MenuUpdate-UnloadMenus ()
  1118.         (ASW-PRINC "\n(ASW-MenuUpdate-UnloadMenus)")
  1119.         (princ "\nUnloading ShipWorks menugroups...")
  1120.         (ASW-Menu-Unload "asw2k")
  1121.         (foreach n '("ASW2K-E" "ASW2K-P" "ASW2K-S" "ASW2K-V")
  1122.                 (ASW-Menu-Unload n)
  1123.         )
  1124. )

  1125. ;;;*************************************************************************
  1126. ;;; MODULE: MenuUpdate-DownloadMenus
  1127. ;;; DESCRIPTION: Downloads server files to client for all ShipWorks menus
  1128. ;;; ARGS: none
  1129. ;;; EXAMPLE:
  1130. ;;;*************************************************************************

  1131. (defun MenuUpdate-DownloadMenus
  1132.         ( / msrc1 msrc2 mtarget1 mtarget2 go)
  1133.         (ASW-PRINC "\n(ASW-MenuUpdate-DownloadMenus)")
  1134.         (cond
  1135.                 ( (setq msrc1 (findfile (strcat G$MENU "\\asw2k.mnu")))
  1136.                   (if (setq mtarget1 (findfile (strcat G$DAT "\\asw2k.mnu")))
  1137.                                 (if (vl-file-delete mtarget1)
  1138.                                         (setq go T)
  1139.                                 )
  1140.                                 (setq go T)
  1141.                         )
  1142.                   (if go
  1143.                                 (if (vl-file-copy msrc1 (strcat G$DAT "\\asw2k.mnu"))
  1144.                                         (princ "\nBase menu file downloaded successfully.")
  1145.                                         (princ "\nFailed to download base menu file!")
  1146.                                 )
  1147.                                 (princ "\nFailed to remove client base menu cache, download failed.")
  1148.                         )
  1149.                 )
  1150.         )
  1151.         (setq go nil)
  1152.         (cond
  1153.                 ( (setq msrc2 (findfile (strcat G$MENU "\" G$APP ".mnu")))
  1154.                   (if (setq mtarget2 (findfile (strcat G$DAT "\" G$APP ".mnu")))
  1155.                                 (if (vl-file-delete mtarget2)
  1156.                                         (setq go T)
  1157.                                 )
  1158.                                 (setq go T)
  1159.                         )
  1160.                   (if go
  1161.                                 (if (vl-file-copy msrc2 (strcat G$DAT "\" G$APP ".mnu"))
  1162.                                         (princ "\nService menu file downloaded successfully.")
  1163.                                         (princ "\nFailed to download service menu file!")
  1164.                                 )
  1165.                                 (princ "\nFailed to remove client service menu cache, download failed.")
  1166.                         )
  1167.                 )
  1168.         )
  1169. )
  1170.                  
  1171. (defun ObjErr (errobj)
  1172.         (princ (strcat "\nError: " (vl-catch-all-error-message errobj)))
  1173. )

  1174. (defun Obj-ReleaseAll (objects)
  1175.         (foreach obj objects
  1176.                 (if (= (type obj) 'vla-object); symbol bound to vla-object type?
  1177.                         (if (not (vlax-object-released-p obj)); not already released?
  1178.                                 (vlax-release-object obj); release it!
  1179.                         )
  1180.                 )
  1181.                 (set (quote obj) nil)
  1182.         )
  1183. )

  1184. ;;;*************************************************************************
  1185. ;;; MODULE: Menu-LoadPartialMenus
  1186. ;;; DESCRIPTION: Loads default menu items for ShipWorks at start-up
  1187. ;;; ARGS: none
  1188. ;;; EXAMPLE: (ASW-Menu-LoadPartialMenus)
  1189. ;;;*************************************************************************

  1190. (defun Menu-LoadPartialMenus
  1191.         ( / mgroups mgnames omg mgf)
  1192.         (ASW-Princ "\n(ASW-Menu-LoadPartialMenus)")
  1193.         (if (not (menugroup "asw2k"))
  1194.                 (progn
  1195.                         (ASW-MenuUpdate-UnloadMenus)
  1196.                         (ASW-MenuUpdate-DeleteClientFiles)
  1197.                         (ASW-MenuUpdate-DownloadMenus)
  1198.                         (ASW-MenuUpdate-LoadClientMenus)
  1199.                 )
  1200.                 (ASW-MenuUpdate-LoadClientMenus)
  1201.         )
  1202.         (setq mgroups (Get-MenuGroups)
  1203.                                 mgnames (Get-MenuGroups-listall)
  1204.         )
  1205.         (if (and C:UPDATE (null (menugroup "asw2k"))) (C:UPDATE))
  1206.         (if (not (menugroup G$APP))
  1207.                 (progn
  1208.                         (princ "\nReloading extended services menu group...")
  1209.                         (foreach mg '("ASW2K-E" "ASW2K-P" "ASW2K-S" "ASW2K-V")
  1210.                                 (if
  1211.                                         (and
  1212.                                                 (member mg mgnames)
  1213.                                                 (setq omg (vla-item mg mgroups))
  1214.                                         )
  1215.                                         (vla-unload omg)
  1216.                                         (vlax-release-object omg)
  1217.                                 )
  1218.                         ); foreach - unload
  1219.                         (cond
  1220.                                 ( (or
  1221.                                                 (setq mgf (findfile (strcat G$APP ".mns")))
  1222.                                                 (setq mgf (findfile (strcat G$APP ".mnc")))
  1223.                                         )
  1224.                                   (princ "\nLoading ShipWorks partial menu data...")
  1225.                                   (vla-load mgroups mgf)
  1226.                                   (if (menugroup G$APP)
  1227.                                                 (menucmd (strcat "P5=+" G$APP ".POP1"))
  1228.                                                 (princ (strcat "\nUnable to load partial menu for service: " G$APP))
  1229.                                         )
  1230.                                 )
  1231.                                 ( T
  1232.                                   (C:UPDATE)
  1233.                                 )
  1234.                         )
  1235.                 )
  1236.                 (princ "\nMenugroup already loaded."); menugroup already loaded, do nothing
  1237.         )
  1238.         (princ)
  1239. )

  1240. ;;;*************************************************************************
  1241. ;;; MODULE: Menu-Unload
  1242. ;;; DESCRIPTION: Unloads specified menugroup, returns if successful or menugroup not loaded
  1243. ;;; ARGS: menugroup-name
  1244. ;;; EXAMPLE: (ASW-Menu-Unload "ASW2K")
  1245. ;;;*************************************************************************

  1246. (defun Menu-Unload (name / omg)
  1247.         (ASW-PRINC "\n(ASW-Menu-Unload)")
  1248.         (if (menugroup name)
  1249.                 (if (setq omg (vla-item (Get-MenuGroups) name))
  1250.                         (progn
  1251.                                 (vla-unload omg)
  1252.                                 (vlax-release-object omg)
  1253.                                 T
  1254.                         )
  1255.                 )
  1256.                 T
  1257.         )
  1258. )

  1259. ;;;*************************************************************************
  1260. ;;; MODULE: Menu-Reload
  1261. ;;; DESCRIPTION: Reloads menugroup popmenu if loaded, loads otherwise
  1262. ;;; ARGS: menugroup-name, path to menufile
  1263. ;;; EXAMPLE:
  1264. ;;;*************************************************************************

  1265. (defun Menu-Reload (name path / mnu1)
  1266.         (ASW-PRINC "\n(ASW-Menu-Reload)")
  1267.   (cond
  1268.                 ( (menugroup name)
  1269.                   (menucmd (strcat "P5=+" name ".POP1"))
  1270.                 )
  1271.                 ( (or
  1272.                                 (setq mnu1 (findfile (strcat path "\" name ".mns")))
  1273.                                 (setq mnu1 (findfile (strcat path "\" name ".mnc")))
  1274.                         )
  1275.                   (vl-cmdf "_.menuload" mnu1)
  1276.                   (menucmd (strcat "P5=+" name ".POP1"))
  1277.                 )
  1278.                 ( T (C:UPDATE) )
  1279.         )
  1280. )

  1281. (defun PopMenu-Insert (mgroup name loc / pmnu)
  1282.         (ASW-PRINC "\n(ASW-PopMenu-Insert)")
  1283.         (if (not (ASW-PopMenu-MenuBar-p name))
  1284.           (if (setq pmnu (ASW-PopupMenu mgroup name))
  1285.                         (progn
  1286.                                 (vla-insertinmenubar pmnu loc)
  1287.                                 (vlax-release-object pmnu)
  1288.                                 T
  1289.                         )
  1290.                         (princ (strcat "\nMenugroup or popmenu not loaded or defined: " name))
  1291.                 )
  1292.                 (princ (strcat "\nPopmenu already loaded: " name))
  1293.         )
  1294. )

  1295. ;;;*************************************************************************
  1296. ;;; MODULE: PopMenu-Remove
  1297. ;;; DESCRIPTION: Removes specified popmenu from menubar, returns nil
  1298. ;;; ARGS: menugroup-name, pop-menu-name
  1299. ;;; EXAMPLE: (ASW-PopMenu-Remove "ASW2K" "&ShipWorks")
  1300. ;;;*************************************************************************

  1301. (defun PopMenu-Remove (mgname name / pmnu)
  1302.         (ASW-PRINC "\n(ASW-PopMenu-Remove)")
  1303.         (if (menugroup mgname)
  1304.                 (if (ASW-PopMenu-MenuBar-p name)
  1305.                         (if (setq pmnu (vla-item (vla-get-menubar (ASW-AcadObject)) name))
  1306.                                 (progn
  1307.                                         (vla-removefrommenubar pmnu)
  1308.                                         (vlax-release-object pmnu)
  1309.                                         (princ (strcat "\nPopmenu successfully removed: " name))
  1310.                                 )
  1311.                                 (princ (strcat "\nPopmenu not found/Unable to remove: " name))
  1312.                         )
  1313.                         (princ (strcat "\nPopmenu not loaded/Unable to remove: " name))
  1314.                 )
  1315.         )
  1316. )

  1317. ;;;*************************************************************************
  1318. ;;; MODULE: PopMenu-MenuBar-p
  1319. ;;; DESCRIPTION: Returns T if menubar contains specified pop-menu item
  1320. ;;; ARGS: pop-menu-name (string, case sensitive, includes mnemonics if used)
  1321. ;;; EXAMPLE: (ASW-PopMenu-MenuBar-p "&ShipWorks") returns T or nil
  1322. ;;;*************************************************************************

  1323. (defun PopMenu-MenuBar-p (name / mbar i found)
  1324.         (ASW-PRINC "\n(ASW-PopMenuLoaded)")
  1325.         (setq mbar (vla-get-menubar (asw-acadobject)) i 0)
  1326.         (while (and (not found) (< i (1- (vla-get-count mbar))))
  1327.                 (if (= (strcase name) (strcase (vla-get-name (vla-item mbar i))))
  1328.                         (setq found T)
  1329.                 )
  1330.                 (setq i (1+ i))
  1331.         )
  1332.         (vlax-release-object mbar)
  1333.         found
  1334. )

  1335. ;;;*************************************************************************
  1336. ;;;*************************************************************************

  1337. (defun Toolbars-Backup (mgroup / tbars name show pair out $regpath)
  1338.         (ASW-PRINC "\n(ASW-Toolbars-Backup)")
  1339.         (setq $regpath (strcat "Menus\\Toolbars\" mgroup))
  1340.         (cond
  1341.                 ( (setq tbars (ASW-Toolbars mgroup))
  1342.                   (vlax-for each tbars
  1343.                                 (setq name (vla-get-name each)
  1344.                                                         show (vla-get-visible each)
  1345.                                                         pair (list name (if (= show :vlax-true) "1" "0"))
  1346.                                                         out  (cons pair out)
  1347.                                 )
  1348.                         )
  1349.                   (vlax-release-object tbars)
  1350.                   (if out
  1351.                                 (progn
  1352.                                         (foreach tb out
  1353.                                                 (ASW-RegSet (strcat $regpath "\" (car tb)) (cadr tb))
  1354.                                         )
  1355.                                 )
  1356.                         )
  1357.                 )
  1358.                 ( T (princ (strcat "\nMenugroup (" mgroup ") has no toolbars.")) )
  1359.         )
  1360.         out
  1361. )

  1362. ;;;*************************************************************************
  1363. ;;;*************************************************************************

  1364. (defun Toolbars-Restore (mgroup / keys $regpath dat out)
  1365.         (ASW-PRINC "\n(ASW-Toolbars-Restore)")
  1366.         (setq $regpath (strcat G$REGROOT "\\Menus\\Toolbars\" mgroup))
  1367.         (cond
  1368.                 ( (menugroup mgroup)
  1369.                   (cond
  1370.                                 ( (setq keys (vl-registry-descendents $regpath))
  1371.                                   (foreach key keys
  1372.                                                 (setq dat (vl-registry-read (strcat $regpath "\" key) nil)
  1373.                                                                         out (cons (list key dat) out)
  1374.                                                 )
  1375.                                         )
  1376.                                 )
  1377.                                 ( T (princ (strcat "\nNo saved toolbar info to retrieve: " mgroup)) )
  1378.                         )
  1379.                 )
  1380.         )
  1381.         out
  1382. )

  1383. ;;;*************************************************************************
  1384. ;;; MODULE: Menu-Load
  1385. ;;; DESCRIPTION: Loads menugroup from specified MNU, MNS or MNC file
  1386. ;;; ARGS: menugroup-name, menufile
  1387. ;;; EXAMPLE:
  1388. ;;;*************************************************************************

  1389. (defun Menu-Load (mgroup mfile / mgroups omg)
  1390.         (ASW-PRINC "\n(ASW-Menu-Load)")
  1391.         (cond
  1392.                 ( (not (menugroup mgroup))
  1393.                   (setq mgroups (Get-MenuGroups))
  1394.                   (if (findfile mfile)
  1395.                           (setq omg (vla-load mgroups (findfile mfile)))
  1396.                                 (princ (strcat "\nUnable to load menu file: " mfile))
  1397.                         )
  1398.                 )
  1399.                 ( T (princ (strcat "\nMenugroup (" mgroup ") is alread loaded.")) )
  1400.         )
  1401.         omg
  1402. )

  1403. (princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-26 21:25:27 | 显示全部楼层
难题终于解决了,谢谢斑竹了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-11-28 19:55:08 | 显示全部楼层
如何给指定的MenuItem加加速键?比如:
Shift+Ctrl+P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2007-11-30 16:47:49 | 显示全部楼层
经典啊,顶楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 01:29 , Processed in 0.307021 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表