找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1220|回复: 4

[日积月累]:注册VBA宏为命令

[复制链接]
发表于 2006-3-26 23:40:14 | 显示全部楼层 |阅读模式

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

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

×
[php](defun RegVBAMacro(filename macrolist lsp_h lsp_f)
(mapcar '(lambda (macroname)
(eval
  (list 'defun
   (read (strcat "c:" macroname))
   '(/ ss)
   '(setq ss (cadr (ssgetfirst)))
   '(setvar "cmdecho" 0)
   '(command "undo" "be")
   lsp_h
   '(sssetfirst nil ss)
   (list 'vla-RunMacro
         '(vlax-get-acad-object)
          (strcat filename ".dvb!" macroname)
   )
   lsp_f
   '(command "undo" "e")
   '(setvar "cmdecho" 1)
   '(princ)
  )))
macrolist
)
(princ)
)
[/php]
调用格式:
(REGVBAMACRO 文件名 宏名列表 Lisp前缀 Lisp后缀)

例:

(REGVBAMACRO "tlscad" '("t3") nil nil)

说明:

修改自mccad的程序,不过已经脸面全非了:)

支持程序加Lisp前缀和后缀,一般来说是把命令的调用放在前缀或后缀里的

例:

(REGVBAMACRO "tlscad" '("TextExplodeH" "TextExplodeV") nil '(command "explode" "l"))

会在调用TextExplodeH及TextExplodeV宏后运行explode命令
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-3-28 10:35:53 | 显示全部楼层
已经测试过,很好! 在2006以下和mccad的没感觉出来差别,但在2007里感觉还是楼主的好用,在2007里mccad的程序调用宏的时候会出现
Command: k
_.-VBARUN
Macro name: test.dvb!k
昨天刚下载了个2007,把自己以前写的小程序移植上去,vba的程序没问题,但是lisp的程序有些无法正常使用了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-28 12:49:11 | 显示全部楼层
修改了一下,支持将当前选择集选定(欢迎测试)
http://www5.139.com/xsfhlzh/1025501/article/349617.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-31 09:11:01 | 显示全部楼层
楼主您好,想请教个问题,下面的lisp程序是转自晓东工具箱的,主要控制屏幕菜单的开关,调整大小等.
我在2006以下版本测试使用并没有问题,但是在2007下使用的时候确无法运行,如果楼主装了2007,希望测试下,谢谢了!
(defun C:SCRMUN_REDRAW (/ ORG_POSITION_LST SCREEN CU_PROFILES)
  (if ;;(and (> (atof (getvar "acadver")) 15.0)
      (= (getenv "ScreenMenu") "1")
    ;;)
    (progn
      (setq SCREEN '(1024 768))  ;请查看看自己屏幕分辨率
      (setq ORG_POSITION_LST
      (strcat (rtos (- (car SCREEN) 86) 2 0)  ;参数屏幕菜单宽度
       " 95 "                          ;参数屏幕菜单长度
       (rtos (- (car SCREEN) 12) 2 0)  ;参数屏幕菜单宽度
       " "
       (rtos (- (last SCREEN) 120) 2 0);参数屏幕菜单长度
      )
      )
      (setq CU_PROFILES
      (strcat "HKEY_CURRENT_USER\\"
       (vlax-product-key)
       "\\PROFILES\\"
       (vla-get-activeprofile
         (vla-get-profiles
    (vla-get-preferences (vlax-get-acad-object))
         )
       )
       "\\DRAWING WINDOW\\"
      )
      )
      (setenv "ScreenMenu" "0")
      (if (vl-registry-read CU_PROFILES "SCREENMENU.POSITION")
(progn
   (vl-registry-write
     CU_PROFILES
     "ScreenMenu.Position"
     ORG_POSITION_LST
   )
   (vl-registry-write CU_PROFILES "ScreenMenu.Style" 4)
)
      )
      (setenv "ScreenMenu" "1")
    )
  )
  (princ)
)


(C:SCRMUN_REDRAW)


;;The following code "xscrmnud" written by LK
;;屏幕菜单开关控制For 2000+
(defun c:xscrmnud(/ AcadObject Preference Display bShowScreenMenu)
  (vl-load-com)
  (setq        AcadObject        (vlax-get-acad-object)
        Preference        (vla-get-Preferences AcadObject)
        Display                (vla-get-Display Preference)
        bShowScreenMenu        (vla-get-DisplayScreenMenu Display)
  )
  (if (= bShowScreenMenu :VLAX-TRUE)
    (vla-put-DisplayScreenMenu Display :VLAX-FALSE)
    (vla-put-DisplayScreenMenu Display :VLAX-TRUE)
  )
  (mapcar 'vlax-release-object
          (list Display Preference AcadObject)
  )
  (princ)
)
(if (> (atof (getvar "acadver")) 15.0)
  (progn
    (vl-load-com)
    (vl-bb-set '#mnu_display (getvar "screenboxes"))
  )
)
;;
;;屏幕菜单开关与切换控制For 2000+,R14中需手动打开屏幕菜单 written by eachy
;;
(defun c:xscrmnu (/ scr #scr_display #acadver)
  ;;保存屏幕菜单初始状态,0 菜单关闭
  (setq        #scr_display (getvar "screenboxes")
        #acadver     (atof (getvar "acadver"))
  )
  (if (and (< #acadver 15.0)
           (= #scr_display 0)
      )
    (progn
      (princ "\n\t您使用的版本为R14,请先手动加载屏幕菜单!!!")
      (exit)
    )
  )
  (if #xdscrmnu
    (progn
      (if (and (> #acadver 15.0)
               (if (> #acadver 15.0)
                 (= (vl-bb-ref '#mnu_display) 0)
               )
          )
        (c:xscrmnud)
        (progn
          (setq scr (last (getvar "menuname") "\\"))
          (menucmd (strcat "s=" scr ".screen"))
        )
      )
      (setq #xdscrmnu nil)
    )
    (progn
      (if (> #acadver 15.0)
        (progn
          (setvar "menuctl" 0)
          (cond
            ((= (getvar "screenboxes") 0)
             (c:xscrmnud)
            )
            ((= (vl-bb-ref '#mnu_display) 0)
             (c:xscrmnud)
            )
            (T)
          )
        )
      )
      (menucmd "s=test.screen")
      (setq #xdscrmnu T)
    )
  )
  (princ)
)

(c:xscrmnu)

;;屏幕菜单开关与切换控制,R14中需手动调整绘图窗口
;;written by eachy 2004.4.13
(defun c:XDTB_Scrmnu ()
  (setvar "menuctl" 0)
  (if #xdscrmnu
    (progn
      (menucmd "s=")
      (setq #xdscrmnu nil)
    )
    (progn
      (if (= (getenv "ScreenMenu") "0")
        (setenv "ScreenMenu" "1")
      )
      ;(menucmd "s=test.xcla_")
      (menucmd "s=test.screen")
      (setq #xdscrmnu T)
    )
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 23:47 , Processed in 0.406640 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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