找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 560|回复: 4

[已解决] xd::menu:addpopup函数存在重复加载下拉菜单的问题

[复制链接]

已领礼包: 201个

财富等级: 日进斗金

发表于 2020-7-28 10:05:39 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
加载方式:在工具->应用程序加载->内容 里面添加的lsp程序,其中包括自定义菜单加载内容。

启动空dwg后,
命令:
OpenDCL Runtime [9.0.6.1] loaded
晓东通用LISP函数库2020.07.28加载完毕.
晓东工具箱菜单及实用程序加载完毕。
AutoCAD 菜单实用工具 已加载。
yqz自定义菜单加载成功!!!
加载天正菜单文件: C:\Tangent\TArchT20V4\sys19x64\tch.tmn*取消*
tshowbar
命令: COMMANDLINE
命令: properties
命令:
命令:


打开一个已有图形后

不能加载菜单项: ACAD:yjk框架柱原位标注
不能加载菜单项: ACAD:yjk平法截面柱表
不能加载菜单项: ACAD:SatweYjk剪力墙校核程序
不能加载菜单项: ACAD:SatweYjk剪力墙工具
正在打开 AutoCAD 2013 格式的文件。
正在重生成模型。
晓东通用LISP函数库2020.07.28加载完毕.
晓东工具箱菜单及实用程序加载完毕。
AutoCAD 菜单实用工具 已加载。Automation 错误。 弹出菜单中存在标签为 从施工平面图中抽取详图表 的菜单项*取消*
命令:
Autodesk DWG。  此文件上次由 Autodesk 应用程序或 Autodesk 许可的应用程序保存,是可靠的 DWG。
命令:


自定义下拉菜单采用xd::menu:addpopup函数,因没有该函数的代码,无法确认哪里出问题了,
疑是:下拉菜单加载后,再打开dwg时,没进行是否已经存在下拉菜单的判断造成的
将函数xd::menu:addpopup换成xd::menu:addpopupmenu就正常了。

最佳答案

查看完整内容

你看看,哪里需要改

评分

参与人数 1D豆 +20 收起 理由
XDSoft + 20 技术引导讨论和指点奖!

查看全部评分

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-28 10:05:40 | 显示全部楼层
  1. (defun XD::Menu:AddPopUp
  2.        (name lst / insertitem gemenubar menubar curmenu)
  3.   (defun insertitem (curmenu lst / k tmp x j)
  4.     (setq k (vla-get-count curmenu)
  5.           j k
  6.     )
  7.     (mapcar
  8.       '(lambda (x / label cmdstr)
  9.          (setq label  (car x)
  10.                cmdstr (cadr x)
  11.                cmdstr (strcat "\003\003\_"
  12.                               (xdrx-string-trimright
  13.                                 (xdrx-string-trimleft
  14.                                   (xdrx-string-regexpr "^[\003]+" cmdstr "")
  15.                                   "_"
  16.                                 )
  17.                                 " "
  18.                               )
  19.                       )
  20.          )
  21.          (cond
  22.            ((or (xdrx-string-regexps "^[ -]+" label) (= label ""))
  23.             (vla-addseparator curmenu (1+ j))
  24.            )
  25.            ((= (type cmdstr) 'str)
  26.             (vla-addmenuitem
  27.               curmenu
  28.               (1+ (vla-get-count curmenu))
  29.               label
  30.               (strcat cmdstr (chr 32))
  31.             )
  32.            )
  33.            ((listp cmdstr)
  34.             (insertitem (vla-addsubmenu curmenu (1+ j) label) cmdstr)
  35.            )
  36.          )
  37.          (setq j (1+ j))
  38.        )
  39.       lst
  40.     )
  41.   )
  42.   (defun getmenubar (str / curmenu menubar)
  43.     (setq menubar (vla-get-menubar (vlax-get-acad-object)))
  44.     (vlax-for menu menubar
  45.       (if (= (vla-get-name menu) str)
  46.         (setq curmenu menu)
  47.       )
  48.     )
  49.     curmenu
  50.   )
  51.   (setq        menubar        (vla-get-menubar (vlax-get-acad-object))
  52.         curmenu        (getmenubar name)
  53.   )
  54.   (if (equal nil curmenu)
  55.     (progn (setq curmenu
  56.                   (vla-add
  57.                     (vla-get-menus
  58.                       (vla-item        (vla-get-menugroups (vlax-get-acad-object))
  59.                                 0
  60.                       )
  61.                     )
  62.                     name
  63.                   )
  64.            )
  65.            (vla-insertinmenubar curmenu (1+ (vla-get-count menubar)))
  66.     )
  67.   )
  68.   (insertitem curmenu lst)
  69. )



你看看,哪里需要改

点评

最后这句位置有点问题,放到if的progn里面就可以了。 (if (equal nil curmenu) (progn (setq curmenu (vla-add (vla-get-menus  详情 回复 发表于 2020-7-28 15:13
测试下,  详情 回复 发表于 2020-7-28 14:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-7-28 14:09:55 | 显示全部楼层
XDSoft 发表于 2020-7-28 10:36
你看看,哪里需要改

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

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-7-28 15:13:23 | 显示全部楼层
XDSoft 发表于 2020-7-28 10:36
你看看,哪里需要改

最后这句位置有点问题,放到if的progn里面就可以了。
(if (equal nil curmenu)
                    (progn
                        (setq curmenu
                                  (vla-add
                                            (vla-get-menus
                                                      (vla-item (vla-get-menugroups (vlax-get-acad-object))
                                                        0
                                                      );;;vla
                                            );;;dvla
                                            name
                                  );;;vla
                           );;;setq
                           (vla-insertinmenubar curmenu (1+ (vla-get-count menubar)))
                        (insertitem curmenu lst)
                    );;;progn
          );;;if

评分

参与人数 1D豆 +20 收起 理由
XDSoft + 20 有始有终奖!

查看全部评分

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

使用道具 举报

已领礼包: 4365个

财富等级: 富可敌国

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 12:49 , Processed in 0.376535 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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