找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7900|回复: 22

[分享] OpenDCL带菜单修改版

[复制链接]
发表于 2013-10-20 13:32:13 | 显示全部楼层 |阅读模式

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

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

×
opendcl对LISP编程者来说是一个非常强大的扩展,而最大的遗憾就是不能定制菜单,为了弥补这一遗憾,研究了一段时间OPENDCL的源码,终于完成了动态菜单的加载,但由于本人水平非常有限,对OPENDCL的源码了解不深,现在只能做到菜单的加载,但不能修改,如需修改只能再加载一次才能达到修改效果。

MenuTest.gif


  1. ;    菜单定义说明        
  2. ;(dcl_form_loadmenu form list)         
  3. ;定义右键弹出式菜单           
  4. ;(dcl_form_loadpoputmenu form list)         
  5. ;                                 
  6. ;参数:            
  7. ; form: 窗体           
  8. ; list: 列表,列表里每一个括号里代表一个菜单,除了标志值为16的弹出式菜单可以不用定义回调函数外,
  9. ;  其它样式菜单必须包含三个参数,第一个为标志值,第二个为显示在菜单上的字符串  
  10. ;  第三个为回调函数字符串,列表可以镶套。      
  11. ;返回值            
  12. ; 成功返回T,否则返回NIL         
  13. ;说明            
  14. ; 列表支持树状结构,如想改变菜单某项值可以重新加载。      
  15. ;标志值说明            
  16. ;MF_POPUP   16   指定该菜单命令有一个关联的弹出式菜单     
  17. ;MF_CHECKED   8  命令旁显示默认复选标志      
  18. ;MF_UNCHECKED   0  清除命令旁的复选标志      
  19. ;MF_DISABLED   2  禁止此菜单命令,但是不变灰显示      
  20. ;MF_ENABLED   0  允许此菜单命令,恢复到正常状态      
  21. ;MF_GRAYED   1  禁止此菜单命令,变灰显示      
  22. ;MF_MENUBARBREAK  32  对于静态菜单,放到新行;对于弹出菜单,放到新栏 中,栏间有分隔线  
  23. ;MF_MENUBREAK   64  对于静态菜单,放到新行;对于弹出菜单,放到新栏,栏间无分隔线  
  24. ;MF_OWNERDRAW   256  指定该命令是自画式菜单命令      
  25. ;MF_SEPARATOR   2048  画一条水平分隔线,只用于弹出式菜单     
  26. ;MF_STRING   0 指定此菜单命令是一个字符串      
  27. ;显示右键菜单            
  28. ;(dcl_Form_TrackPopupMenu Form Flags x y)        
  29. ;            
  30. ;参数            
  31. ; Form: DCL窗体           
  32. ; nFlags: 标志值,确定函数如何放置快捷菜单      
  33. ; x: 指定相对于屏幕右上角X坐标        
  34. ; Y: 指定相对于屏幕右上角Y坐标        
  35. ;标志值说明            
  36. ;确定函数如何水平放置快捷菜单         
  37. ;TPM_CENTERALIGN: 4  若设置此标志,函数将按参数x指定的坐标水平居中放置快捷菜单  
  38. ;TPM_LEFTALIGN: 0 若设置此标志,函数使快捷菜单的左边界与由参数X指定的坐标对齐。  
  39. ;TPM_RIGHTALIGN: 8 若设置此标志,函数使快捷菜单的右边界与由参数X指定的坐标对齐  
  40. ;确定函数如何垂直放置快捷菜单         
  41. ;TPM_BOTTOMALIGN: 32 若设置此标志,函数使快捷菜单的下边界与由参数y指定的坐标对齐。  
  42. ;TPM_TOPALIGN:  0 若设置此标志,函数使快捷菜单的上边界与由参数y指定的坐标对齐。  
  43. ;TPM_VCENTERALIGN; 16 若设置此标志,函数将按参数y指定的坐标垂直居中放置快捷菜单  
  44. ;用下列标志位之一来确定在快捷菜单跟踪哪一个鼠标键:      
  45. ;TPM_LEFTBUTTON: 0 若设置此标志,用户只能用鼠标左键选择菜单项。   
  46. ;TPM_RIGHTBUTTON: 2 若设置此标志,用户能用鼠标左、右键选择菜单项。   

  47. (DEFUN C:MenuTest (/)
  48.      ;;--------加载菜单子函数------------
  49.      (defun c:loadmenu (/)
  50.    (or new (setq new 0))
  51.    (or clo (setq clo 0))
  52.    (or window
  53.        (setq window '(16 "窗口(&W)" (8 "BOOK1" "C:BOOK1")))
  54.    )
  55.    (SETQ menulist (list (list 16 "文件(&F)" (list new "新建(&N)" "C:NEW") '(0 "打开(&O)" "c:open") (list clo "关闭(&C)" "C:CCLOSE") '(0 "退出(&X)" "C:CLOSEDCL"))
  56.           '( 16 "编辑(&E)" (0 "剪切(&T)" "C:Cut")(0 "复制(&C)" "C:Copy")(0 "粘贴(&P)" "C:Stick"))
  57.           window
  58.     )
  59.    )
  60.    (dcl_form_loadmenu Menu_Form1 menulist)
  61.      )
  62.      (defun c:loadpoputMENU (/)
  63.    (SETQ menulist '( (16 "右键菜单" (0 "菜单一" "")(2048 "" "")(2 "菜单二" ""))
  64.        (0 "插入(&I)" "c:Insert")
  65.       (0 "删除(&D)" "c:Delete")
  66.        (0 "剪切(&T)" "C:Cut")
  67.        (0 "复制(&C)" "c:Copy")
  68.        (0 "粘贴(&P)" "c:Stick")
  69.       ))
  70.    (dcl_form_loadPOPUTmenu Menu_Form1 menulist)
  71.      )
  72.      (defun C:NEW()
  73.    (dcl_messagebox "选择了新建" "")
  74.    )
  75.      (defun c:open()
  76.    (dcl_messagebox "选择了打开" "")
  77.    )
  78.      (defun c:CCLOSE()
  79.    (dcl_messagebox "选择了关闭" "")
  80.    )
  81.      (defun c:Copy()
  82.    (dcl_messagebox "选择了复制" "")
  83.    )
  84.      (defun c:Delete()
  85.    (dcl_messagebox "选择了删除" "")
  86.    )
  87.      (defun C:Stick()
  88.    (dcl_messagebox "选择了粘贴" "")
  89.    )
  90.      (defun C:CUT()
  91.    (dcl_messagebox "选择了剪切" "")
  92.    )
  93.      (defun c:Insert()
  94.    (dcl_messagebox "选择了插入" "")
  95.    )
  96.      (defun C:CLOSEDCL()
  97.    (dcl_Form_Close Menu_Form1 2)
  98.    )
  99.      (defun c:Menu_Form1_tree_OnRightClick (/)
  100.    (setq pt(dcl_GetMouseCoords))
  101.    (dcl_Form_TrackPopupMenu Menu_Form1 0 (car pt)(cadr pt))
  102.    (GC)
  103.    )
  104.      ;;----------初始化----------------
  105.      (defun c:Menu_Form1_OnInitialize (/)
  106.    (c:loadmenu)
  107.    (c:loadpoputMENU)
  108.      )
  109.      
  110. ;;;-----------主程序--------------
  111.      (if (not (setq dclfilepath (findfile "Menu.lsp")))
  112.    (progn
  113.         (dcl_messagebox "找不到DCL文件\r\n请确保DCL文件在CAD搜索路径里" "提示" 2 1 )
  114.         (vl-exit-with-error "")
  115.    )
  116.      )
  117.      (dcl_Project_Load dclfilepath)
  118.      (setq ref (dcl_Form_Show Menu_Form1))
  119. )


[sell=50]
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:OpenDCL.part04.rar 
下载次数:93  文件大小:423.58 KB 
下载权限: 不限 以上  [免费赚D豆]



请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:OpenDCL.part03.rar 
下载次数:114  文件大小:1000 KB 
下载权限: 不限 以上  [免费赚D豆]



请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:OpenDCL.part02.rar 
下载次数:102  文件大小:1000 KB 
下载权限: 不限 以上  [免费赚D豆]



请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:OpenDCL.part01.rar 
下载次数:46  文件大小:1000 KB 
下载权限: 技术员 以上  [免费赚D豆]


[/sell]


评分

参与人数 1威望 +1 D豆 +10 贡献 +2 收起 理由
XDSoft + 1 + 10 + 2 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-10-20 14:03:46 | 显示全部楼层
楼主给力,这个ODCL加载后提示是7.0.1,没有最新的7.0.12的源代码吗? 另外,能不能让在最新的ODCL上也能运行?

点评

没有最新版的源码,OPENDCL一直以来好像都没怎么更新了,更新只是升级了对cad的版本,功能好像都没什么变化,新版的DCL文件应该都是一样的吧,我没测试过。  详情 回复 发表于 2013-10-20 14:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-20 14:39:49 | 显示全部楼层
XDSoft 发表于 2013-10-20 14:03
楼主给力,这个ODCL加载后提示是7.0.1,没有最新的7.0.12的源代码吗? 另外,能不能让在最新的ODCL上也能运 ...

没有最新版的源码,OPENDCL一直以来好像都没怎么更新了,更新只是升级了对cad的版本,功能好像都没什么变化,新版的DCL文件应该都是一样的吧,我没测试过。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

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

使用道具 举报

发表于 2013-10-21 07:16:46 | 显示全部楼层

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

使用道具 举报

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

使用道具 举报

发表于 2013-11-12 11:42:22 | 显示全部楼层
花了50豆买了,没有权利下载?楼主怎么回事?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-12 11:43:36 | 显示全部楼层
OpenDCL.part01.rar (1000 KB, 下载次数: 3) 这个不能下,别的可以。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-30 12:05:50 | 显示全部楼层
duotu007 发表于 2013-11-12 11:42
花了50豆买了,没有权利下载?楼主怎么回事?

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:OpenDCL.part01.rar 
下载次数:133  文件大小:1000 KB 
下载权限: 不限 以上  [免费赚D豆]


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

使用道具 举报

已领礼包: 329个

财富等级: 日进斗金

发表于 2013-11-30 19:40:15 来自手机 | 显示全部楼层
需要,可是没豆,楼主传我一个好吗
QQ,307227591
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

发表于 2013-11-30 21:34:02 | 显示全部楼层
本帖最后由 kcad2010 于 2013-11-30 21:36 编辑

; error: no function definition: DCL_FORM_LOADMENU
; error: no function definition: DCL_FORM_TRACKPOPUPMENU怎么没有这二个函数


点评

请确保你是否加载了对应的ARX程序,还有请确定你是否已加载了原版的OPDCL程序?如果已加载请先卸载了再加载我修改的,如果还不成请把你的CAD版本告诉我,我在04、05、08版本下调试过都是可以的。  详情 回复 发表于 2013-12-3 18:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-3 18:22:20 | 显示全部楼层
kcad2010 发表于 2013-11-30 21:34
; error: no function definition: DCL_FORM_LOADMENU
; error: no function definition: DCL_FORM_TRACKP ...

请确保你是否加载了对应的ARX程序,还有请确定你是否已加载了原版的OPDCL程序?如果已加载请先卸载了再加载我修改的,如果还不成请把你的CAD版本告诉我,我在04、05、08版本下调试过都是可以的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 329个

财富等级: 日进斗金

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

使用道具 举报

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

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:57 , Processed in 0.264744 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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