找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5261|回复: 7

[发布] 右键菜单的简单实现

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2013-6-23 04:11:04 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 yxpxa 于 2013-6-23 05:43 编辑

OpenDCL没有右键菜单,我用按钮控件简单组合了一个,按照这个方法,窗口顶部的下拉菜单也能模拟出来,甚至比右键菜单简单些,不需提取x y坐标。这是在我的 dtx 文本编辑里已实现的,现发布出来请大家提提意见。

111.gif

  1. ;;OpenDCL右键菜单的实现
  2. ;;原创,小蜜蜂,小东空间,2013-6-23
  3. (defun c:rmenu( / ssr lt)
  4. (setq ssr "Rmenu_Form1_RightMneu" Lt '("1" "2" "3" "4" "5") ;;5个菜单控件,不够可以加
  5.        *Namecap* '("菜单1" "背景-蓝色" "背景-红色" "背景-青色" "退出")
  6.        *ss-rigthmenu* (mapcar '(lambda(x)(strcat ssr x)) Lt))

  7.    (dcl_Project_Load "Rmenu.odcl" t)
  8.    (dcl_Form_Show Rmenu_Form1)
  9.    (princ)
  10. )
  11. ;;初始化窗口
  12. (defun c:Rmenu_Form1_OnInitialize (/)
  13. (setq *RM-ent* (mapcar '(lambda(x)(eval (read x)))  *ss-rigthmenu*)) ;;控件数组
  14. (Def_Clicked_Fun)
  15. (move_mouse_color)
  16. )

  17. (defun c:Rmenu_Form1_PictureBox1_OnRightClick (/)
  18. (show_hidee_cs t)
  19. (right_menue_pos *x^_^x* *y$$$$_$$$$Y*)
  20. )

  21. (defun c:Rmenu_Form1_PictureBox1_OnMouseMove (Flags X Y /)(setq *x^_^x* x *y$$$$_$$$$Y* y))
  22. (defun c:Rmenu_Form1_PictureBox1_OnClicked (/)(show_hidee_cs nil))



  23. ;;设置菜单显示的位置
  24. (defun right_menue_pos(x y)
  25. (setq D (- y 23)) ;;23为每条菜单的高度
  26. (foreach a (mapcar 'cons *RM-ent* *Namecap*)
  27.    (dcl_Control_SetPos (car a) x (setq d (+ d 23)))
  28.    (dcl_Control_SetCaption (car a) (cdr a)))
  29. )


  30. ;;定义菜单单击事件
  31. (defun Def_Clicked_Fun( / dcf)
  32. (setq dcf '("fun1" "fun2" "fun3" "fun4" "fun5")) ;;单击响应函数列表
  33. (foreach x (mapcar 'cons *ss-rigthmenu* dcf)
  34.   (eval (read (strcat "(defun c:" (car x) "_OnClicked (/)"
  35.         "(" (cdr x) " (dcl_Control_GetCaption " (car x) ")))"))))
  36. )


  37. ;;定义鼠标滑过菜单的高亮显示
  38. (defun move_mouse_color()
  39. (foreach x *ss-rigthmenu*
  40.    (eval (read (strcat "(defun c:" x "_OnMouseMove (Flags X Y / xxLt)"
  41.       "(setq xxLt (mapcar '(lambda(y)(list y -16 -19)) (vl-remove "" x "" *ss-rigthmenu*))"
  42.        "     xxLt (cons (list "" x "" -3 -16) xxLt))"
  43.       "(foreach y xxLt "
  44.       "(dcl_Control_SetBackColor (eval (read (car y))) (cadr y))"
  45.       "(dcl_Control_SetForeColor (eval (read (car y))) (caddr y))))"))))
  46. )


  47. ;;菜单的切换显示
  48. (defun show_hidee_cs(c)
  49. (foreach x *RM-ent* (dcl_Control_SetVisible x c))
  50. )

  51. ;;调用自定义函数
  52. (defun fun1( ss )
  53. (show_hidee_cs nil)
  54.   (dcl_MessageBox (strcat "你点击了 " ss "  ") "提示" 2 2)
  55. )
  56. (defun fun2( ss )
  57. (show_hidee_cs nil)
  58. (dcl_Control_SetBackColor Rmenu_Form1_PictureBox1 5)
  59. )
  60. (defun fun3( ss )
  61. (show_hidee_cs nil)
  62. (dcl_Control_SetBackColor Rmenu_Form1_PictureBox1 1)
  63. )
  64. (defun fun4( ss )
  65. (show_hidee_cs nil)
  66. (dcl_Control_SetBackColor Rmenu_Form1_PictureBox1 4)
  67. )
  68. (defun fun5( ss )
  69. (dcl_Form_Close Rmenu_Form1)
  70. )







源码共享如下:
请点击此处下载

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

您的用户组是:游客

文件名称:右键菜单测试.rar 
下载次数:80  文件大小:2.2 KB 
下载权限: 不限 以上  [免费赚D豆]




评分

参与人数 2D豆 +15 贡献 +2 收起 理由
XDSoft + 10 + 1 好主题奖!
牢固 + 5 + 1 很给力!经验;技术要点;资料分享奖!

查看全部评分

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-6-23 08:44:05 | 显示全部楼层
cad自身就可以自定义菜单,为何还要这样做,使用menucmd函数让它显示不是更好吗?

点评

楼主演示的对话框中的右键菜单使用,非CAD中的右键菜单!  详情 回复 发表于 2013-6-23 11:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-6-23 11:23:50 | 显示全部楼层
Gdlprfcu 发表于 2013-6-23 08:44
cad自身就可以自定义菜单,为何还要这样做,使用menucmd函数让它显示不是更好吗?

楼主演示的对话框中的右键菜单使用,非CAD中的右键菜单!

点评

cad中使用和对话框中使用不是一样的吗? [attachimg]2852[/attachimg]  详情 回复 发表于 2013-6-23 12:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-23 12:35:43 | 显示全部楼层
牢固 发表于 2013-6-23 11:23
楼主演示的对话框中的右键菜单使用,非CAD中的右键菜单!

cad中使用和对话框中使用不是一样的吗?
test.gif

点评

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-23 13:23:37 | 显示全部楼层
Gdlprfcu 发表于 2013-6-23 12:35
cad中使用和对话框中使用不是一样的吗?

你这个对话框是ODCL做的吗? 把代码贴上论坛吧。

点评

对话框是OPENDCL做的,但代码是花了我很多心思和精力写的,虽然到现在为止还是个未完成之作,但还不想去公布源码,sorry.  详情 回复 发表于 2013-6-23 14:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-23 14:26:04 | 显示全部楼层
XDSoft 发表于 2013-6-23 13:23
你这个对话框是ODCL做的吗? 把代码贴上论坛吧。

对话框是OPENDCL做的,但代码是花了我很多心思和精力写的,虽然到现在为止还是个未完成之作,但还不想去公布源码,sorry.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-20 15:16:18 | 显示全部楼层
请问那个是什么LISP编辑器啊?怎么样能够让他识别LISP内部函数啊 ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 00:19 , Processed in 0.361708 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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