明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: langjs

[经验] lisp创建自定义工具栏

    [复制链接]
发表于 2012-4-9 19:07:33 | 显示全部楼层
发表于 2012-4-9 19:21:50 | 显示全部楼层
执行不了啊?!!!!
暂未开源?!!!
发表于 2012-4-9 19:37:42 | 显示全部楼层
Dear sir,
see this code i think use full for create u r task
  1. ;;;-===-==-==-==-=-==-==-==-=-==-==-=-==-==-=-==-==-=-==-==-=-==-=-==-
  2. ;;; (crpd:loadDynamicPopUpMenu '("Mymenu"(("Do Command1" . "command1")("Do Command2" . "command2"))))
  3. ;;;-===-==-==-==-=-==-==-==-=-==-==-=-==-==-=-==-==-=-==-==-=-==-=-==-
  4. (defun crpd:loaddynamicpopupmenu (menulist     /
  5.                                   acadapp      cmd
  6.                                   currmenugroup
  7.                                   doc          loadedmenulist
  8.                                   menu         newmenu
  9.                                  )
  10.   (vl-load-com)
  11.   (setq acadapp        (vlax-get-acad-object)
  12.         loadedmenulist '()
  13.         doc            (vla-get-activedocument acadapp)
  14.         currmenugroup  (vla-item (vla-get-menugroups
  15.                                    (vla-get-application doc)
  16.                                  )
  17.                                  "ACAD"
  18.                        )
  19.         cmd            (lambda (x)
  20.                          (strcat "\033\033\137" x "\040")
  21.                        )
  22.   )
  23.   (if (/= currmenugroup nil)
  24.     (progn
  25.       (vlax-for menu (vla-get-menus currmenugroup)
  26.         (setq loadedmenulist
  27.                (cons
  28.                  (vla-get-namenomnemonic menu)
  29.                  loadedmenulist
  30.                )
  31.         )
  32.       )
  33.       (if (= (vl-position (car menulist) loadedmenulist) nil)
  34.         (progn
  35.           (setq newmenu (vla-add (vla-get-menus currmenugroup)
  36.                                  (car menulist)
  37.                         )
  38.           )
  39.           (foreach e (car (cdr menulist))
  40.             (vla-addmenuitem
  41.               newmenu
  42.               (1+ (vla-get-count newmenu))
  43.               (car e)
  44.               (cmd (cdr e))
  45.             )
  46.           )
  47.           (vla-insertinmenubar
  48.             newmenu
  49.             (1+ (vla-get-count
  50.                   (vla-get-menubar acadapp)
  51.                 )
  52.             )
  53.           )
  54.         )
  55.         (princ (strcat "\nerror of type ohno "
  56.                        (car menulist)
  57.                        " menu is already loaded "
  58.                )
  59.         )
  60.       )
  61.     )
  62.   )
  63.   (princ)
  64. )
发表于 2012-4-10 08:59:41 | 显示全部楼层
谢谢!
发表于 2012-4-13 17:45:46 | 显示全部楼层
好好学习下,谢谢了
发表于 2012-4-16 17:16:51 | 显示全部楼层
有个疑问,(open "TEMPTOOLBAR.mnu" "W")这一句是将mnu文件建在哪个位置了,因为cad搜索目录有好多个。还有能不能直接在所加载程序路径创建这个文件?

点评

应该是第一个搜索目录下. 当然能直接在所加载程序路径创建这个文件,前提是你要先把路径读出来才行  发表于 2012-4-16 19:36
发表于 2012-4-16 20:29:37 | 显示全部楼层
changyiran 发表于 2012-4-16 17:16
有个疑问,(open "TEMPTOOLBAR.mnu" "W")这一句是将mnu文件建在哪个位置了,因为cad搜索目录有好多个。还有 ...

这个路径貌似不好取得,其实如果能取得cad下面的backup的路径也是很好的,可惜我不会取得。能不能指教下?
 楼主| 发表于 2012-4-16 21:47:37 | 显示全部楼层
changyiran 发表于 2012-4-16 20:29
这个路径貌似不好取得,其实如果能取得cad下面的backup的路径也是很好的,可惜我不会取得。能不能指教下? ...

(defun getlsppath (/ lsppath)        ; 读取运行程序路径并加到cad支持路径_by:wzh,如果运行的是vlx,要把程序里边的lsp改为vlx
    (setq lsppath (vl-registry-read "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\lsp"
                                    (substr (vl-registry-read "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\lsp"
                                                              "MRUList"
                                            ) 1 1
                                    )
                  )
    )
    (setenv "ACAD" (strcat (getenv "ACAD") ";" (vl-filename-directory lsppath)))
    lsppath
  )
回复 支持 1 反对 0

使用道具 举报

发表于 2012-4-17 08:39:28 | 显示全部楼层
langjs 发表于 2012-4-16 21:47
(defun getlsppath (/ lsppath)        ; 读取运行程序路径并加到cad支持路径_by:wzh,如果运行的是vlx, ...

我试验了下,很正确,只是自己目前有些地方还看不懂,先留着,以后慢慢吸收!
发表于 2012-4-17 09:59:58 | 显示全部楼层
谢谢分享,值得学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 06:11 , Processed in 0.165432 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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