明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4951|回复: 26

[函数] (20230213更)通用DCL输入框----魔法交互,5种控件,edit_box数据检查现....

[复制链接]
发表于 2023-1-31 12:22:03 | 显示全部楼层 |阅读模式
本帖最后由 wzg356 于 2023-2-28 17:51 编辑



图片为下面例子的运行样子

20230213更,增加为5种控件,改进应用体验
20230209更,输入框数据检查改为实时现场纠错,免币源码在http://bbs.mjtd.com/forum.php?mo ... =1&extra=#pid908231“通用函数-坐标处理.lsp”里面,那个帖子的所有程序都直接用的这个通用输入框

主要用于参数设置、数据交换,也可与图面交互
主要是edit_box/toggle /popup_list/list_box 控件,随edit_box可以增加辅助botton,
数值edit_box可设置数据限制,输入数据检查,出错实时提示错误信息并现场要求纠正
自我感觉比较强了
具体应用自己研究母程序,

可少写了好多对话框

程序要下载
下面是应用示例-----也在源程序里面
其他说明也在母程序
应用肯定不限于下面例子,
我自用程序涉及参数设置的大部分直接使用

;通用输入框;应用示例
;(getYESorNOdcl "YES OR NO?")
(defun getYESorNOdcl (str)
        (TYdataset str nil 12 nil nil)
);返回1/0
;(getNUMdcl "输入数值" 5);返回整数或5---按取消返回初值
;(getNUMdcl "输入数值" 5.0);返回实数或5.0---按取消返回初值
;(getNUMdcl "输入数值" "A");返回字符串或"A"---按取消返回初值
;很少这样用,进一步控制参源码注释,在此不表
(defun getNUMdcl (str n)
        (TYdataset ""(list(list str n))12 nil T)
)
;---------------
;多数情况简单点是这样,4种基本控件都有了
(defun c:yyy4 (/ l2 lst)
        (setq l1 '("中国" "欧盟" "北美"))
        (setq l2 '("100*100" "200*200" "500*500" "800*800"))
        (setq lst '(0 0 45.0 55 105 "0"))
        (setq lst(TYdataset  
                "参数设置"         ;参数1--DCL标题
                (list(list "标准"(list (car lst) l1));popup_list/key0
                        (list "规格" (list (cadr lst) l2 t));list_box/key1
                        (list "旋转(°)" (caddr lst));edit_box/key2
                        (list "是否加框" (list (setq a(cadddr lst))(if(= a "0")"1" "0")));toggle/key3
                );参数2--据需求设定的控件及初值
                12 NIL T
        ))
)
;---------------------
;可以在合适位置添加分割线或文字,也可用于参数4fun写表达式显示动态信息--自行参阅母程序交待
(defun c:yyy5 ( / a lst)        
        (setq lst '(0 100 45.0 0 "0"))
        (setq lst(TYdataset  
                "参数设置"         ;参数1--DCL标题
                (list(list "参数1" (car lst));edit_box/key0
                        (list "参数2" (cadr lst));edit_box/key1
                        "----AB界-----";"spacer_0;"或其他字符串str,任何位置均可
                        ;作用1仅紧凑控件就写"spacer_0;"控件或
                        ;作用2:相应位置内容为str的text
                        (list "字高" (caddr lst));edit_box/key2
                        (list "精度" (list(cadddr lst)'("0" "0.0" "0.00" "0.000")));popup_list/key3
                        (list "勾选输出XYH" (list (setq a(last lst))(if(= a "0")"1" "0")));toggle/key4
                );参数2--据需求设定的控件及初值
                12 NIL T
        ))
)
;-------------------------------
;增加辅助botton及表达式参数增强控制示例
(defun c:yyy6 ( / lst)        
        (setq lst(TYdataset  
                "注册XX程序"         ;参数1--DCL标题
                (list(list "Cbutton申请码" "cfghh125gg");button/Akey0/edit_box/key0
                        (list "注册码" "联系QQ12345");edit_box/key1
                );参数2--据需求设定的控件及初值
                12
                '(progn(mode_tile "key0" 1);锁定key0
                        ;对母程序函数actAKEYS重定义,重设辅助botton动作
                        (defun actAKEYS nil(action_tile "Akey0" "(alert \"\\\n申请码已复制\")"))
                        ;剪贴板设置函数自己找哈
                )
                T
        ))
        ;(注册验证程序 lst)
)
;---------------------------------
;popup_list/list_box用法及联动示例
;通过辅助botton实现与图面的交互示例

(defun c:yyy7 (/ lst yy0)        
        (setq lst '(0 0 45.0 "0"))
        (setq l2 '(("100*100" "200*200" "500*500" "800*800")
                                (3.25 5.78 6.88 9.00)("3A" "3B" "3C" "3D")
        ))
        (defun yyy0(lst / a lstnew p)               
                (setq lstnew(TYdataset        "联动交互"
                        (list(list "标准"(list (car lst) '("中国" "欧盟" "北美")));popup_list/key0
                                (list "规格" (list (cadr lst) (nth (car lst) l2)t));list_box/key1
                                ;(list "规格" (list (cadr lst) (nth (car lst) l2)t t));list_box/key1 2种样子
                                (list "》buttonTDW" (caddr lst));button/Akey2/;edit_box/key2
                                (list "是否加框" (list (setq a(cadddr lst))(if(= a "0")"1" "0")));toggle/key3
                        )
                        12
                        '(progn
                        (action_tile "key0" "(addlist \"key1\"(nth(atoi $value)l2))(set_tile \"key1\" \"0\")")
                        ;popup_list/list_box联动
                         ;注释下面这句话就可与图面交互
                        ;(defun actAKEYS nil(action_tile "Akey2" "(alert \"\\\n功能脑补...\")"))
                        ;对母程序函数actAKEYS重定义,重设Akey2辅助botton动作
                        )
                        T
                ))
                (if(= (cadr  lstnew)12)
                        (progn(setq p(getpoint "\n取得坐标"));图面交互;数据处理......略
                                (yyy0 (car lstnew))
                        )lstnew
                )
        )
        (yyy0 '(0 0 45.0 "0"))        
)







本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
USER2128 + 1 赞一个!
zml84 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-2-1 19:53:21 | 显示全部楼层
本帖最后由 zml84 于 2023-2-1 19:57 编辑

凑个热闹
https://mp.weixin.qq.com/s/56eTQA4wHbpTKMgzelIBCQ

  1. ;;;========================================================*
  2. ;;;测试
  3. (defun C:TT ()
  4.     (ZL-INPUTBOX
  5.         "身份验证"
  6.         '(("editbox" "用户名:" "USER" "20")
  7.             ("editbox" "口 令:" "" "20")
  8.             ("popup_list"
  9.                 "类 型:"
  10.                 ("受限用户""一般用户" "超级管理员")
  11.                 "20"
  12.             )
  13.             ;;
  14.             ("spacer_1")
  15.             ("text" "这是一个说明文本。")   
  16.             ("说明" "更多说明..." "说明信息1\n说明信息2\n...")
  17.         )
  18.     )
  19. )


---------------------------------------------------------------------
  1. ;;;=================================================================*
  2. ;;;    定义通用数据输入窗体                                         *
  3. ;;;                                                                 *
  4. ;;;=================================================================*
  5. ;|注意,调用参数均为字符串形式                                     *
  6. ;;;返回:字符串列表                                                 *
  7. ;;;日期:zml84 于 2012-06-20
  8. ;;;-----------------------------------------------------------------*
  9. ;;;示例:                                                           *
  10.   (ZL-INPUTBOX                                                *
  11.       "显示的对话框名称"                                      *
  12.       '(("editbox"                                            *
  13.          "editbox显示的说明"                                  *
  14.          "editbox显示值"                                      *
  15.          "20"                                                 *
  16.         )                                                     *
  17.         ("popup_list"                                         *
  18.          "popup_list显示的说明"                               *
  19.          ("列表值1" "列表值2" "...")                          *
  20.          "20"                                                 *
  21.         )                                                     *
  22.        )                                                      *
  23.   )                                                           *
  24. ;;;=================================================================*
  25. ;;|;
  26. (vl-load-com)
  27. ;;;=================================================================*
  28. (defun ZL-INPUTBOX (STR_DIANAME      LST       /
  29.         LIST->DCL  TEMPFILENAME       F1
  30.         STR_JG     I    N       DCLID
  31.         LST_RESULT str_sm key_sm
  32.        )
  33.     ;;==================================================================*
  34.     ;;功能:根据控件信息表,生成DCL语言的文本                           *
  35.     ;;      注意,调用参数均为字符串形式                                *
  36.     ;;示例:(list->dcl '( "editbox" "editbox显示的说明" "editbox显示值"  "20") 100)
  37.     ;;  (list->dcl '( "popup_list" "popup_list显示的说明" ("列表值1" "列表值2" "...")"20") 101)
  38.     ;;  (list->dcl '( "popup_list" "popup_list显示的说明" "列表值1\\n列表值2\\n..."  "20") 102)
  39.     ;;返回:与控件对应的dcl文本
  40.     ;;日期:zml84 于 2012-06-20
  41.     (defun LIST->DCL (LST KEY_I / X)
  42.   (cond
  43.       ;;
  44.       ((wcmatch (car LST) "ZML84*")
  45.     (strcat
  46.         ":button{"
  47.         (strcat "\nlabel=\""
  48.           (nth 0 LST)
  49.           "\";"
  50.           "\nis_enabled = false;"
  51.         )
  52.         "\n}\n"
  53.     )
  54.       )
  55.       ;;标准按钮,点击后显示更多说明信息。
  56.       ;;格式:("说明"  按钮名称   信息)
  57.       ;;示例:("说明" "更多说明..." "说明信息1\n说明信息2\n...")
  58.       ((wcmatch (car LST) "说明")
  59.           (setq str_sm (nth 2 lst));_设置说明文本,供后面回调用
  60.     (strcat
  61.         ":button{"
  62.         (strcat "\nlabel=\""
  63.           (nth 1 LST)
  64.           "\";"
  65.           (strcat "\nkey =\"KEY_SM\";")
  66.           "\nis_enabled = true;"
  67.         )
  68.         "\n}\n"
  69.     )
  70.       )
  71.       ;;
  72.       ((= (car LST) "editbox")
  73.        (strcat
  74.      ":edit_box{"
  75.      "\nallow_accept = true ;"
  76.      (strcat "\nedit_width ="
  77.        (nth 3 LST)
  78.        ";"
  79.      )
  80.      "\nfixed_width = true ;"
  81.      (strcat "\nkey =\"" (itoa KEY_I) "\";")
  82.      (strcat "\nlabel=\""
  83.        (nth 1 LST)
  84.        "\";"
  85.      )
  86.      (strcat "\nvalue=\""
  87.        (nth 2 LST)
  88.        "\";"
  89.      )
  90.      "\n}\n"
  91.        )
  92.       )
  93.       ;;
  94.       ((= (car LST) "popup_list")
  95.        (strcat
  96.      ":popup_list{"
  97.      (strcat "\nwidth ="
  98.        (nth 3 LST)
  99.        ";"
  100.      )
  101.      (strcat "\nlabel=\""
  102.        (nth 1 LST)
  103.        "\";"
  104.      )
  105.      (strcat "\nkey =\"" (itoa KEY_I) "\";")
  106.      (cond
  107.          ((= (type (nth 2 LST)) 'STR)
  108.           (strcat "\nlist=\""
  109.             (nth 2 LST)
  110.             "\";"
  111.           )
  112.          )
  113.          ((= (type (nth 2 LST)) 'list)
  114.           (strcat
  115.         "\nlist=\""
  116.         (apply
  117.             'strcat
  118.             (mapcar
  119.           '(lambda (X)
  120.                (strcat "\\n"
  121.                  (vl-princ-to-string X)
  122.                )
  123.            )
  124.           (nth 2 LST)
  125.             )
  126.         )
  127.         "\";"
  128.           )
  129.          )
  130.      ) ;_结束 cond
  131.      "\n}\n"
  132.        )
  133.       )
  134.       ;;
  135.       ((= (car LST) "text")
  136.        (strcat
  137.      ":text{"
  138.      (strcat "\nlabel=\""
  139.        (nth 1 LST)
  140.        "\";"
  141.      )
  142.      "\n}\n"
  143.        )
  144.       )
  145.       ;;
  146.       ((= (car LST) "spacer_1")
  147.     (strcat  "\n"
  148.       (nth 0 LST)
  149.       ";\n"   
  150.     )
  151.       )
  152. ;;;      ((/= (LIST->DCL (cons "editbox" LST) KEY_I) "")
  153. ;;;       (LIST->DCL (cons "editbox" LST) KEY_I)
  154. ;;;      )
  155.       (t "")
  156.   ) ;_结束 cond
  157.     ) ;_结束defun
  158.     ;;==================================================================*
  159.     ;;功能:定义按下确定按钮后的操作
  160.     (defun GETINPUT (LEN / I N TMP)
  161.   (setq RESULTLIST '()
  162.         I     0
  163.   )
  164.   (repeat  (length LST)
  165.       (setq N (nth I LST))
  166.       (cond
  167.     ;;
  168.     ((= (car N) "editbox")
  169.      (setq LST_RESULT
  170.         (cons (get_tile (itoa I)) LST_RESULT)
  171.      )
  172.     )
  173.     ;;
  174.     ((= (car N) "popup_list")
  175.      (setq TMP (nth 2 N))
  176.      ;;tmp有两种格式:字符形式的 和 表形式
  177.      ;;如果是字符格式的,就转换为表(以\n分割)
  178.      (cond
  179.          ((= (type (nth 2 N)) 'STR)
  180.           (setq TMP "*INPUTBOX函数 有待完善*")
  181.          )
  182.          ((= (type (nth 2 N)) 'list)
  183.           (setq TMP (nth (atoi (get_tile (itoa I))) TMP))
  184.          )
  185.      )
  186.      (setq LST_RESULT
  187.         (cons TMP LST_RESULT)
  188.      )
  189.     )
  190.     ;;

  191.     ;;
  192.     (t
  193.      (setq LST_RESULT
  194.         (cons NIL LST_RESULT)
  195.      )
  196.     )
  197.       )
  198.       (setq I (1+ I))
  199.   )
  200.   (setq LST_RESULT (reverse LST_RESULT))
  201.     ) ;_结束defun
  202.     ;;==================================================================*
  203.     (setq TEMPFILENAME (vl-filename-mktemp "dcltmp.dcl"))
  204.     (setq F1 (open TEMPFILENAME "w"))

  205.     ;;组织头部
  206.     (setq STR_JG (strcat
  207.          "InputBox:dialog {"
  208.          (strcat "\nlabel =\"" STR_DIANAME "\";")
  209.      )
  210.     )
  211.     ;;组织正文
  212.     (setq I 0)
  213.     (repeat (length LST)
  214.   (setq N (nth I LST))
  215.   (setq STR_JG (strcat STR_JG
  216.            (LIST->DCL N I)
  217.          )
  218.   )
  219.   (setq I (1+ I))
  220.     )

  221.     ;;组织按钮、
  222.     (setq STR_JG
  223.        (strcat
  224.      STR_JG
  225.      "\nspacer_0;"
  226.      "\nok_cancel;"
  227.      ;;zml个人信息
  228.      "\n:button{"
  229.      "\nlabel=\"ZML84作品,必属精品。\";"
  230.      "\nis_enabled = false;\n}\n"
  231.      ;;
  232. ;;;     "\n:text{"
  233. ;;;     "\nlabel=\"ZML84作品,必属精品。\";"
  234. ;;;     "\nis_enabled = false;"   
  235. ;;;     "\n}\n"
  236.      ;;对话框结束
  237.      "\n}\n"
  238.     )
  239.     )
  240.     ;;写入文件
  241.     (princ STR_JG F1)
  242.     ;;关闭文件
  243.     (close F1)
  244.     (setq DCLID (load_dialog TEMPFILENAME))
  245.     (if  (not (new_dialog "InputBox" DCLID ""))
  246.   (progn (alert "对话框加载失败!") (exit))
  247.     )
  248.     (action_tile
  249.   "accept"
  250.   "(GetInput  Lst ) (done_dialog 1)"
  251.     )
  252.     (if STR_SM
  253.     (action_tile
  254.   "KEY_SM"
  255.   "(if zl-msgbox (ZL-msgbox nil \"i\" STR_SM 0)(ALERT STR_SM))"
  256.     ))
  257.     (start_dialog)
  258.     (unload_dialog DCLID)
  259.     (vl-file-delete TEMPFILENAME)
  260.     ;;返回
  261.     LST_RESULT
  262. )

本帖子中包含更多资源

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

x

评分

参与人数 3明经币 +3 收起 理由
bssurvey + 1 赞一个!
USER2128 + 1 赞一个!
wzg356 + 1 很给力!

查看全部评分

 楼主| 发表于 2023-2-9 23:10:50 | 显示全部楼层
本帖最后由 wzg356 于 2023-2-10 12:55 编辑


20230209更,输入框数据检查改为实时现场纠错,免币源码在http://bbs.mjtd.com/forum.php?mo ... =1&extra=#pid908231“通用函数-坐标处理.lsp”里面,那个帖子的所有程序都直接用的这个通用输入框

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
tigcat + 1 + 20 很给力!

查看全部评分

 楼主| 发表于 2023-2-2 13:19:01 | 显示全部楼层

多年前就在你的博客上掏了不少干货,包含这个。。。。
发表于 2023-1-31 12:57:00 | 显示全部楼层
能给个实例么?对着看容易明白
 楼主| 发表于 2023-1-31 13:07:07 来自手机 | 显示全部楼层
加载后运行事例代码就行,具体说明也在事例代码
 楼主| 发表于 2023-1-31 14:47:03 来自手机 | 显示全部楼层
bai2000 发表于 2023-1-31 12:57
能给个实例么?对着看容易明白

补充了,3个示例,加载程序后,从简单开始运行体验
发表于 2023-1-31 16:01:35 | 显示全部楼层
感谢分享,学习研究一下
发表于 2023-1-31 16:40:16 | 显示全部楼层
这是纯函数?没有快捷键?
发表于 2023-1-31 20:23:07 | 显示全部楼层
兄弟,厉害,多谢无私奉献,省了很多时间
发表于 2023-1-31 22:19:12 | 显示全部楼层
谢谢楼主分享
发表于 2023-2-1 09:35:20 | 显示全部楼层
感谢大佬分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-19 13:14 , Processed in 0.232868 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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