热度 23|||
;;功能:添加工具条 ;;参数: ;;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 ) )
效果: