【函数源码分享】根据G版思路写的右键菜单函数。附实例代码。
本帖最后由 wowan1314 于 2013-6-8 11:11 编辑根据G版思路写的“对话框”,或者叫“右键菜单函数”更准确些。
原帖地址:
有趣的对话框程序!LISP能实现吗?http://bbs.mjtd.com/forum.php?mo ... 1224&fromuid=282351
;;=========================右键菜单函数V1.0--先关闭捕捉===========BY WOWAN1314
;; 思路来源----G版 程序制作:----WOWAN1314
;;主要参考资料: CAOYIN刷子函数及"流浪水手"的拖拽实例。其他不一一点名了。基本是拼凑出来的。
;; 感谢G版,caoyin流浪水手 ...一发程序发现大部分都是别人写的。有的都不记的作者了。哎。怪不得好多人都不敢发
;;免责声明:本着开源精神,本代码可随意复制。仅供参考、交流。实际工作不得使用,否则后果自负。
;;==================================================================;;
;;功能:在指定点产生类似右键菜单的表格框供选择。并返回选择值。
;;调用格式:(YY:YJCAIDAN PT LEN LEN1 WZLST TUXIAN)
;;参数: PT表格产生点,len格子大小。tuxian为要作底的文字内容. WZLST为要写的文字表.LEN1横向长度,
;; 共计5个参数TUXIAN可为NIL,其他必须有值.
;;附加说明:表格横向固定2格,竖向多少格由文字表决定. 竖向长度固定,横向长度自定. 文字样式随当前
;;返回值: 表(0 "DN15").表内第一项为数字:表示选择了WZLST的第几项(其中0表示第一个文字),
;; 表内第二项为对应的文字内容.
;;==================================================================;;;;;======================{示例代码:修改替换管径文字 }====================;;
;;;
(DEFUN C:T11 (/ EN WZTXT WZLST LEN OLDWZ LEN1 SNAP WZ *error* error_end)
;;-------------------------------出错函数
(defun *error* (x) (error_end)(command "_.undo" "1"))
(defun error_end ()
(AND snap (setvar "osmode" snap));打开捕捉
(command "_.undo" "e");结束编组
;回到当初
(REDRAW);刷新当前
)
;;主函数
(command "_.undo" "Be")
(WHILE (SETQ EN (entsel "\n选择要修改管径的文字:"))
(IF(AND (SETQ WZTXT (DXF_READ 1 (CAR EN)))
(wcmatch WZTXT "*DN##*")
) ;管径
(PROGN
(SETQ WZLST (LIST "DN15" "DN20" "DN32""DN40"
"DN50" "DN65" "DN75""DN80"
"DN100" "DN300" "DN150""DN200"
"你好"
)
)
(SETQ len (p2u222 88)
OLDWZ WZTXT
LEN1(* 0.26 4 LEN)
;;计算横向长度
)
(setq snap (getvar "osmode"))
(setvar "osmode" 0) ;关闭
(IF (SETQ WZ (CADR (YY:YJCAIDAN (CADR EN) LEN LEN1 WZLST OLDWZ)));;调用菜单函数
(YY_SubUpd (CAR EN) 1 WZ) ;;此处放回调函数
) ; IF
)
) ;END IF
)
(error_end)
(PRINC)
) ;END DEFUN
;;;===========================================得到当前屏幕的大小比例
(defun p2u222 (pix)
(* pix (/ (getvar "viewsize") (cadr (getvar "screensize"))))
) 6年了~却没有发布深化这个函数的。
让此函数支持 “多标签 多页 固定行” 显示菜单。
如果有人写了,方便的话请发上来,我现在好多基本函数都忘了。这个右键菜单还是比系统自带的好用好看些~
本帖最后由 尘缘一生 于 2014-6-14 08:06 编辑
代码写的确实好,然而,本帖只能解决修改问题,一般情况下,我们比如:修改数字,钢筋间距、直径什么的,也就是其中某个数错,并不需要全部这样改写的。
相信大家都知道“它山之石屏幕改字”,比这个要实用快速的多。
上面已有同仁提出:能否改动代码,空选择的时候,直接写出这个字符,提的好。
总之一句话:
这段代码好是好,要实际用起来,作用并不大,因为有比这更好的手段,期待修改此代码,增加大家说的写出实体功能。
本帖最后由 fl202 于 2018-2-2 11:55 编辑
众山小 发表于 2013-5-22 08:51
楼主,能否在无编辑修改文字时,是能否增加为插入文字?
2018.2.2更新,烦请各位重新下载测试,重新下载不会反复收币。谢谢!
下载地址:
更新后的gif见下方:
修改如下:
1 增加插入文字/复制/文字刷等功能。(不需要的该功能的,请屏蔽;,因为操作多了1次。)
2 修正了wipout的子函数功能,就是遮盖动态菜单下的cad内容。因为有些人比如我用的高版本cad里,如果加载错误,会导致整个程序没有反应。低版本需要加载acwipeout.arx,高版本里需要加载acismui.arx,本程序中加入判断及加载语句。该子函数在屏幕上内容比较多时效果会很好,否则菜单和背景重合会比较难辨别,像我下面的未更新前的gif文件,就是没有遮盖的。
3 主程序和调用的通用菜单函数放在一起了,免得有些人不知道怎么用。直接下载本函数就可以使用了。
楼下说的错误,还未修正,因为不知道原因。等待。
更新前的gif就不贴出来了。
fl202 发表于 2017-12-8 16:36
2018.2.2更新,烦请各位重新下载测试,重新下载不会反复收币。谢谢!
下载地址:
更新后的gif见下方:
...
在布局还是看不到??这有办法解决吗
布局里这样了 支持一下,看看思路,我写那个扔了好久了,没时间 厉害啊厉害,学习一下~ 漂亮!楼主太有才了 这个太漂亮了,用处很大 建筑的好像很少用到呢 还要加个错误处理,不然按ESC中断后就留在屏幕上了。对等好贴,要吹毛求疵 厉害啊厉害,好贴不顶对不起自己 能框选就好了。选不到的时候不自动退出就好了。 楼主真的很厉害。