明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1587|回复: 2

[基础] [求助]自定義菜單

[复制链接]
发表于 2010-1-20 18:57 | 显示全部楼层 |阅读模式

在用LIsp自定义了菜单時如何指定或獲取菜單節

如:

***POP501
**CMDEFAULT
             [預設模式的上下文功能表]
ID_CMNonLast [重複%s(&R)]^C^C;
             [--]
ID_Cutclip   [剪下(&T)]^C^C_cutclip
ID_Copyclip  [複製(&C)]^C^C_copyclip
ID_Copybase  [以基準點複製(&B)]^C^C_copybase
ID_Pasteclip [貼上(&)]^C^C_pasteclip
ID_Pastebloc [貼上為圖塊(&K)]^C^C_pasteblock
ID_Pasteorig [貼到原始座標(&D)]^C^C_pasteorig

如何指定或獲取上面例子中的 “**CMDEFAULT”和 “***POP501”

請求高手幫助

先謝了

 楼主| 发表于 2010-1-21 08:53 | 显示全部楼层

有那位大哥幫一下我!

 楼主| 发表于 2010-1-21 09:52 | 显示全部楼层

下面是我在论坛上下的,有些地方改動了一下

;;(setq str (gps->popupmenu '("Line" "" "Circle" "Arc")))
(DEFUN gps->popupmenu (MENULST / acadobj currmenugroup menus n newmenu newmenuitem openmacro str thisdoc)
      (SETVAR "cmdecho" 0 )
      ;;(SETQ FLAG nil )
      ;;(SETQ FN (OPEN "VbaMenu.mns" "w"))
      ;;(CLOSE FN)
      (SETQ ACADOBJ (vlax-get-acad-object))
      (SETQ THISDOC (vla-get-ActiveDocument ACADOBJ))
      (SETQ MENUS (vla-get-MenuGroups ACADOBJ))
      ;;(UnLoadMenuGroup "VbaMenu")
      ;;(vla-Load MENUS "VbaMenu.mns")
      (SETQ CURRMENUGROUP (vla-Item MENUS "acad"))
      (IF (<= (vla-get-Count (vla-get-Menus CURRMENUGROUP)) 0 )
        (PROGN
              (SETQ NEWMENU (vla-Add (vla-get-Menus CURRMENUGROUP) "V&BA Menu"))
              (FOREACH N MENULST
                      (IF (= (TYPE N) (QUOTE STR))
                           (COND ((/= N "")
                           (SETQ OPENMACRO (STRCAT (CHR 3 ) (CHR 3 ) "(setq xxx " N ")" (CHR 32))
                                  NEWMENUITEM (vla-AddMenuItem NEWMENU (1+ (vla-get-Count NEWMENU )) N OPENMACRO )
                                   )
                           (vla-put-HelpString NEWMENUITEM N )
                           )
                           ((= N "" )
                           (vla-AddSeparator NEWMENU (1+ (vla-get-Count NEWMENU ) ) )
                           )
                         )
                     )
                )
  ;;(vla-Save CURRMENUGROUP acMenuFileCompiled )
  )
   (PRINC  "\nThe menu is already loaded" )
   )
      (PRIN1)
      (MENUCMD "p0=VbaMenu.POP2")
      (MENUCMD "p0=*" )
)

我把".mns"文件的讀取和儲存取消了,把".mns"文件改成了cad已加載的菜單如“acad”

這樣是可以顯示菜單,但在MENUCMD語句中必須指定菜單标识"如POP1,POP2",而上面的程序新建菜單時是在下拉菜單的末尾新增一個下拉菜單項,也就是已加載的菜單中末尾菜單項是POP1,那麼你新增菜單項就是POP2,如果後期在".mns"文件中再增加菜單項的話,就不顯示菜單了,隻好改MENUCMD語句中“POPn”。

用下面菜單為例 MENUCMD語句也可寫成(MENUCMD "p0=VbaMenu.CMDEFAULT")

***POP501
**CMDEFAULT
             [預設模式的上下文功能表]
ID_CMNonLast [重複%s(&R)]^C^C;

如果這樣寫的問題就是上面程序新增菜單項後好像沒有指定,而(vla-Add (vla-get-Menus CURRMENUGROUP) "V&BA Menu"))中的"V&BA Menu"也就是POP501例子中的"預設模式的上下文功能表"菜單名,這個菜單名在MENUCMD語句中好像不行

請求高手幫助


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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 17:46 , Processed in 0.174279 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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