明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9244|回复: 11

[OpenDCL] [源码]窗口右键菜单及下拉菜单的实现

[复制链接]
发表于 2013-7-1 18:59 | 显示全部楼层 |阅读模式
本帖最后由 yxp 于 2013-7-6 06:32 编辑

菜单的增加和减少,只需要改动3个地方
1    LISP代码  *Namecap* 菜单名称
2    Lisp代码 菜单点击事件中对应的响应函数 dcf 定义
3   Odcl窗口  对应的图像按钮增减及改名
  1. ;;===============================================================
  2. ;;OpenDCL右键菜单的实现
  3. ;;原创,小蜜蜂,QQ:9034589  2013-6-23
  4. ;;===============================================================
  5. (defun c:rmenu( / ssr lt *ss-rigthmenu*)
  6. (setq ssr "Rmenu_Form1_RightMneu" n 0
  7.        *Namecap* '("菜单1" "背景-蓝色" "背景-红色" "前景-青色" "前景-黑色" "退出"))
  8. (repeat (length *Namecap*)
  9.    (setq *ss-rigthmenu* (cons (strcat ssr (itoa (setq n (1+ n)))) *ss-rigthmenu*)))

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

  20. (defun c:Rmenu_Form1_PictureBox1_OnRightClick (/)
  21. (right_menue_pos *x^_^x* *y^_^y*)
  22. )

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




  25. ;;设置菜单显示的位置
  26. ;;窗口宽度 ww 高度 wh;  菜单宽度 cw 高度 ch
  27. (defun right_menue_pos(x y / d zch xx yy nn)
  28. (setq ww 600 wh 340 cw 100 ch 24 nn (length *Namecap*) zch (* nn ch))
  29. (cond
  30.    ((and (< x (- ww cw)) (> y (- wh zch))) (setq xx x yy (- wh zch))) ;;第一象限显示
  31.    ((and (< x (- ww cw)) (< y (- wh zch))) (setq xx x yy y)) ;;第四象限
  32.    ((and (> x (- ww cw)) (< y (- wh zch))) (setq xx (- x cw) yy y)) ;;第三象限
  33.    ((and (> x (- ww cw)) (> y (- wh zch))) (setq xx (- x cw) yy (- wh zch)))  ;;第二象限
  34. )
  35. (setq d (- yy ch)) ;;23为每条菜单的高度
  36. (foreach a (mapcar 'cons *RM-ent* *Namecap*)
  37.    (dcl_Control_ZOrder (car a) 1)  ;;提到最顶端显示,如果已经是最前就不需要
  38.    (dcl_Control_SetPos (car a) xx (setq d (+ d ch)) cw ch)
  39.    (dcl_Control_SetCaption (car a) (cdr a))
  40.    )
  41. (show_hidee_cs t)
  42. )


  43. ;;定义菜单单击事件
  44. (defun Def_Clicked_Fun( / dcf)
  45. (setq dcf '("fun1" "fun2" "fun3" "fun4" "fun5" "fun6")) ;;单击响应函数列表
  46. (foreach x (mapcar 'cons *ss-rigthmenu* dcf)
  47.   (eval (read (strcat "(defun c:" (car x) "_OnClicked (/)"
  48.         "(" (cdr x) " (dcl_Control_GetCaption " (car x) ")))"))))
  49. )


  50. ;;定义鼠标滑过菜单的高亮显示
  51. (defun move_mouse_color(L / )
  52. (setq *#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%^&* L)
  53. (foreach x L
  54.    (eval (read (strcat "(defun c:" x "_OnMouseMove (Flags X Y / xxLt er)"
  55.       "(setq xxLt (mapcar '(lambda(y)(list y -16 -19)) *#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%^&*)"
  56.        "     xxLt (subst (list "" x "" -3 -16)(assoc "" x "" xxLt) xxLt)"
  57.        "*LTMenu* (cons " x " (car *LTMenu*)) er (cdr *LTMenu*))"  ;;防止菜单闪烁
  58.       "(if (and er (/= er (car *LTMenu*))) (foreach y xxLt "
  59.       "(dcl_Control_SetBackColor (eval (read (car y))) (cadr y))"
  60.       "(dcl_Control_SetForeColor (eval (read (car y))) (caddr y)))))"))))
  61. )


  62. ;;菜单的切换显示
  63. (defun show_hidee_cs(c)
  64. (foreach x *RM-ent* (dcl_Control_SetVisible x c))
  65. )

  66. ;;调用自定义函数
  67. (defun fun1( ss )
  68. (show_hidee_cs nil)
  69. (dcl_MessageBox (strcat "你点击了 " ss "  ") "提示" 2 2)
  70. )


  71. (defun fun2( ss )
  72. (show_hidee_cs nil)
  73. (dcl_Control_SetBackColor Rmenu_Form1_PictureBox1 5)
  74. )
  75. (defun fun3( ss )
  76. (show_hidee_cs nil)
  77. (dcl_Control_SetBackColor Rmenu_Form1_PictureBox1 1)
  78. )
  79. (defun fun4( ss )
  80. (show_hidee_cs nil)
  81. (dcl_Control_SetBackColor Rmenu_Form1_Label1 4)
  82. )
  83. (defun fun5( ss )
  84. (show_hidee_cs nil)
  85. (dcl_Control_SetBackColor Rmenu_Form1_Label1 -22)
  86. )
  87. (defun fun6( ss )
  88. (dcl_Form_Close Rmenu_Form1)
  89. )









ODCL环境自理
源码下载

本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +3 收起 理由
品茗新秀 + 1 赞一个!
286168051 + 2 很给力!

查看全部评分

发表于 2017-10-4 21:20 | 显示全部楼层
感谢楼主的无私分享 谢谢
发表于 2024-2-19 21:34 | 显示全部楼层
感谢分享  ................................
发表于 2013-7-1 22:17 | 显示全部楼层
我来捧场,哈哈,又是沙发啊,
发表于 2013-7-2 13:14 | 显示全部楼层
厉害啊,学习了
发表于 2013-7-3 23:20 | 显示全部楼层
出现; 错误: no function definition: DCL_PROJECT_LOAD

点评

yxp
ODCL环境自理  发表于 2013-7-6 06:33
发表于 2013-7-7 18:32 | 显示全部楼层
这么好的东东
能教一下ODCL环境自理

点评

yxp
.............. 把对应 opendcl.**.arx 复制到CAD支持目录即可  发表于 2013-7-7 21:53
发表于 2013-7-17 00:17 | 显示全部楼层
学习了,你用的是哪个版本 opendcl没找到有后缀为**.arx
发表于 2013-7-17 00:21 | 显示全部楼层
还有想把窗口放CAD的右上方,应在哪一句上修改,用哪个代码

点评

yxp
你需要的是非模态停靠式窗口? 在属性里可以设置  发表于 2013-8-6 22:30
发表于 2014-1-16 12:01 | 显示全部楼层
不错,不过只带下拉菜单的代码,就像结构计算V1.0演示的那样,贴出了看看啊。
发表于 2014-11-7 15:14 | 显示全部楼层
hao 。存下来 备用
发表于 2015-10-26 04:41 来自手机 | 显示全部楼层
很好,下载了作为参考
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 17:17 , Processed in 0.515600 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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