注册 登录
明经CAD社区 返回首页

Gu_xl的个人空间 http://www.mjtd.com/?161460 [收藏] [复制] [分享] [RSS]

日志

动态添加自定义工具条

热度 23已有 5933 次阅读2014-6-12 23:05 |个人分类:Lisp应用|系统分类:开发| VisualLisp, AutoCAD, 动态添加自定义工具条

自定义添加<a href="http://bbs.mjtd.com/forum-6-1.html" target="_blank" class="relatedlink">工具</a>条.LSP

态添加自定义工具条.LSP

本源代码由 Gu_xl 编写发布! 联系方式: Email: Gu_xl@sohu.com
;;功能:添加工具条
;;参数:
;;MenuGroupName 菜单组名
;;toolbarItems 要添加的工具条列表,格式如下:
;|   '(
        (toolBarName ;_ 工具条名称
         Left ;_ 工具条在屏幕左边像素坐标
         Top ;_ 工具条在屏幕顶部像素坐标
         (Name ;_ 按钮名称
          HelpString ;_ 说明字串
          Macro ;_ 命令宏,注意命令后要有一个空格
          SmallIconName ;_ 按钮小图标16x16,图像文件要在搜索目录下或在DLL资源文件中
          [LargeIconName] ;_ 按钮大图标24x24,图像文件要在搜索目录下或在DLL资源文件中
          [FlyoutButton]) ;_ 若是浮出按钮,则为 浮出按钮关联的工具条名称字串,否则为nil或不提供
        ...)
       ...)
|;
(defun gxl-AddToolBars (MENUGROUPNAME TOOLBARITEMS  /
			MENUGROUPOBJ  TOOLBARS	    TOOLBARNAME
			ITEMS	      TOOLBAR	    IDX
			NAME	      HELPSTRING    MACRO
			SMALLICONNAME LARGEICONNAME FLYOUTBUTTON
			TOOLBARITEM   Flyout	    Left
			Top
		       )
  (if (not (setq menugroupobj
		  (GXL-CATCHAPPLY
		    vla-item
		    (list
		      (vla-get-MenuGroups (vlax-get-acad-object))
		      MenuGroupName ;_ "测量工具集" 菜单组名称
		    )
		  )
	   )
      )
    (progn
      (alert (strcat "菜单组\""
		     MenuGroupName
		     "\"不存在!无法加载菜单条!"
	     )
      )
      (exit)
    )
  )
  (setq toolBars (vla-get-toolbars menugroupobj)) ;_ 工具条
  (foreach items toolbarItems
    (setq toolBarName (car items) ;_ 工具条名称
	  Left	      (cadr items) ;_ 工具条 屏幕位置
	  Top	      (caddr items) ;_ 工具条屏幕位置
	  items	      (cdddr items)
    )
    (if	(setq toolbar
	       (GXL-CATCHAPPLY
		 vla-item
		 (list toolBars toolBarName)
	       )
	)
      (vla-delete toolbar)
    )
    (setq toolbar (vla-add toolBars toolBarName))
    (vla-put-left toolbar left)
    (vla-put-top toolbar Top)
    (setq idx 0)
    (foreach lst items
      (setq name (car lst)
	    HelpString
	     (cadr lst)
	    Macro (caddr lst)
	    SmallIconName
	     (cadddr lst)
	    LargeIconName
	     (car (cddddr lst))
	    FlyoutButton
	     (cadr (cddddr lst))
      )
      (if (not LargeIconName)
	(setq LargeIconName SmallIconName)
      )
      (if FlyoutButton
	(setq Flyout :vlax-true)
	(setq Flyout :vlax-false)
      )
      (setq ToolbarItem
	     (GXL-CATCHAPPLY
	       vla-AddToolbarButton
	       (list toolbar idx name HelpString Macro Flyout)
	     )
      )
      (GXL-CATCHAPPLY
	vla-SetBitmaps
	(list ToolbarItem SmallIconName LargeIconName)
      )
      (if FlyoutButton
	(GXL-CATCHAPPLY
	  vla-AttachToolbarToFlyout
	  (list ToolbarItem MENUGROUPNAME FlyoutButton)
	)
      )
      (setq idx (1+ idx))
    )
  )
)
;;测试
(defun c:tt1 ()
  (setq	items
	 (list
	   (list
	     "文字工具1" ;_ 工具条名称
	     50
	     100
	     (list "文字合并"	      "选择文字合并"
		   "\003\003JTEXT "   "jtext.bmp"
		   "jtext.bmp"
		  )
	     (list "文字垂直左对齐"	"文字垂直左对齐"
		   "\003\003vlts "	"VLTS.bmp"
		   "VLTS.bmp"
		  )
	   )
	   (list
	     "文字工具2" ;_ 工具条名称
	     50
	     150
	     (list "文字编号左对齐"	"文字编号左对齐"
		   "\003\003BHDQ "	"BHDQ.bmp"
		   "BHDQ.bmp"
		  )
	     (list "文字拆字按线排序"	 "文字拆字按线排序"
		   "\003\003CZPX "	 "CZPX.bmp"
		   "CZPX.bmp"
		  )
	     (list "文字合并"	      "选择文字合并"
		   "\003\003JTEXT "   "jtext.bmp"
		   "jtext.bmp"	      "文字工具1"
		  ) ;_ 浮出按钮
	   )
	 )
  )
  (gxl-AddToolBars "ACAD" items)
)
;;;(gxl-CatchApply fun args) 重定义 VL-CATCH-ALL-APPLY ,如函数错误返回nil
(defun gxl-CatchApply ( fun args / result )
  (if
    (not
      (vl-catch-all-error-p
        (setq result
          (vl-catch-all-apply (if (= 'SYM (type fun)) fun (function fun)) args)
        )
      )
    )
    result
  )
)
效果:


路过

雷人
21

握手
2

鲜花

鸡蛋

刚表态过的朋友 (23 人)

发表评论 评论 (3 个评论)

回复 自贡黄明儒 2014-6-14 08:05
以往见过虾版写过,但运行很慢。相信G版的更好,大家学习的榜样。
回复 jiayiio 2015-5-26 22:29
你好,能不能把langjs动态轴侧工具改成45轴侧呢?
回复 xcmdos 2016-10-7 15:02
(list "文字合并"              "选择文字合并"
                   "\003\003JTEXT "   "jtext.bmp"
                   "jtext.bmp"
                  ),您好,问下这个路径该放在那个地方

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-4-19 18:13 , Processed in 0.177103 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部