本帖最后由 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"))))
- )
|