找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 664|回复: 3

[源码] 选项勾选,打钩打岔

[复制链接]
发表于 2021-2-14 16:24:16 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 dcl1214 于 2021-2-14 16:28 编辑

经常会遇到让用户勾选的情况,我包装了一个方法,分享给大家,传入参数支持3种
  1. (defun $op-check$ (tiles    dclname  lst      /         *error*
  2.        dcl_id   dcl-f    dialog   f         keys
  3.        rows      startnum tiles-key         tmp_f
  4.        tmp_lst
  5.       )
  6.           ;选项打钩,选项勾选
  7.   (defun *error* (s)
  8.     (if  (and (= dialog 1) (< dialog 2))
  9.       (repeat 10
  10.   (print
  11.     "可能是因为传入的列表行数列数没整理好导致界面超出显示器分辨率"
  12.   )
  13.       )
  14.       (print s)
  15.     )
  16.   )
  17.   (defun _sensor:lst->dat (filename data extension lst / file)
  18.   ;写对话框文件
  19.       (if (not filename)
  20.   (setq filename (getfiled "Create Output File" "" extension 1))
  21.       )
  22.       (if (setq file (open filename "w"))
  23.   (progn
  24.     (cond  ((= (type data) 'STR)
  25.      (write-line data file)
  26.     )
  27.     ((= (type data) 'LIST)
  28.      (foreach line data
  29.        (write-line line file)
  30.      )
  31.     )
  32.     )
  33.     (close file)
  34.     filename
  35.   )
  36.   nil
  37.       )
  38.     )
  39.   (defun $yi-dui-shu-zi$ (len / ss i)
  40.           ;返回从数字0开始的一堆list数据
  41.     (if  (and len (= (type len) 'int))
  42.       (progn
  43.   (setq ss nil)
  44.   (setq i 0)
  45.   (while (< i len) (setq ss (cons i ss)) (setq i (1+ i)))
  46.   (setq ss (reverse ss))
  47.       )
  48.     )
  49.     ss
  50.   )
  51.   (cond  ((and tiles
  52.         (= (type tiles) 'list)
  53.         (= (type (car tiles)) 'list)
  54.         (= (type (car (car tiles))) 'list)
  55.         (member (cdr (car (car tiles))) (list '"0" '"1"))
  56.    )
  57.    nil
  58.   )
  59.   ((and tiles
  60.         (= (type tiles) 'list)
  61.         (= (type (car tiles)) 'list)
  62.         (= (type (car (car tiles))) 'str)
  63.         (member (cdr (car tiles)) (list '"0" '"1"))
  64.    )
  65.    (setq tiles (list tiles))
  66.   )
  67.   ((and tiles
  68.         (= (type tiles) 'list)
  69.         (= (type (car tiles)) 'str)
  70.    )
  71.    (setq tiles
  72.     (mapcar  (function
  73.         (lambda (a)
  74.           (mapcar (function (lambda (b) (cons b "0"))) a)
  75.         )
  76.       )
  77.       (list tiles)
  78.     )
  79.    )
  80.   )
  81.   )
  82.   (setq  tiles-key
  83.    (mapcar
  84.      (function
  85.        (lambda (r ir)
  86.          (mapcar
  87.      (function
  88.        (lambda (a ic / k str)
  89.          (setq k (strcat "r" (vl-princ-to-string ir)))
  90.          (setq k (strcat k "c" (vl-princ-to-string ic)))
  91.          (setq
  92.            str (strcat ":toggle {"
  93.            (strcat "key = \"" k "\" ;")
  94.            (strcat "label = \"" (car a) "\" ;")
  95.            (strcat "value = " (cdr a) " ;")
  96.            "width = 20 ;"
  97.            "vertical_margin = none ;"
  98.            "horizontal_margin = none ;"
  99.            "}"
  100.          )
  101.          )
  102.          (list (cons "字段" (car a))
  103.          (cons "key" k)
  104.          (cons "str" str)
  105.          )
  106.        )
  107.      )
  108.      r
  109.      (mapcar '1+ ($yi-dui-shu-zi$ (length r)))
  110.          )
  111.        )
  112.      )
  113.      tiles
  114.      (mapcar '1+ ($yi-dui-shu-zi$ (length tiles)))
  115.    )
  116.   )
  117.   (setq
  118.     keys
  119.      (mapcar
  120.        (function
  121.    (lambda (a)
  122.      (mapcar (function (lambda (b) (cdr (assoc "key" b)))) a)
  123.    )
  124.        )
  125.        tiles-key
  126.      )
  127.   )
  128.   (setq keys (apply 'append keys))
  129.   (setq
  130.     rows
  131.      (mapcar
  132.        (function
  133.    (lambda (a)
  134.      (mapcar (function (lambda (b) (cdr (assoc "str" b)))) a)
  135.    )
  136.        )
  137.        tiles-key
  138.      )
  139.   )
  140.   (setq
  141.     rows (mapcar
  142.      (function
  143.        (lambda (a / str)
  144.          (setq str (apply 'strcat a))
  145.          (setq str (strcat ":row {" str "}"))
  146.          (setq str
  147.           (strcat
  148.       str
  149.       ":spacer {fixed_height = true ;height = 0.5 ;vertical_margin = none ;horizontal_margin = none ;}"
  150.           )
  151.          )
  152.          str
  153.        )
  154.      )
  155.      rows
  156.    )
  157.   )
  158.   (setq  rows
  159.    (append
  160.      (list "op:dialog {key = \"op\" ;label = \"请选择\" ;")
  161.      (list
  162.        ":spacer {fixed_height = true ;height = 0.2 ;vertical_margin = none ;horizontal_margin = none ;}"
  163.      )
  164.      rows
  165.      (list
  166.        ":button {is_cancel = true ;key = \"tc\" ;label = \"确定\" ;vertical_margin = none ;horizontal_margin = none ;}"
  167.      )
  168.      (list "vertical_margin = none ;horizontal_margin = none ;}")
  169.    )
  170.   )
  171.   (setq tmp_lst rows)
  172.   (or dclname (setq dclname "op"))
  173.   (if (and dclname tiles)
  174.     (progn
  175.       (setq
  176.   f (strcat (vl-filename-directory (vl-filename-mktemp)) "\\")
  177.       )
  178.       (and (setq tmp_f (strcat f dclname ".dcl")))
  179.       (if (and tmp_f (findfile tmp_f))
  180.   (vl-file-delete tmp_f)
  181.       )
  182.       (setq dcl-f (_sensor:lst->dat tmp_f tmp_lst T NIL))
  183.       (and dcl-f (setq dcl_id (load_dialog dcl-f)))
  184.       (if dcl_id
  185.   (progn
  186.     (setq dialog 1)
  187.     (and dcl_id (new_dialog "op" dcl_id))
  188.     (setq dialog 2)
  189.     (ACTION_TILE
  190.       "tc"
  191.       "(PROGN(setq keys-gou(mapcar(function(lambda(a)(cons a(get_tile a))))keys))(done_dialog 0))"
  192.     )
  193.     (setq startNum (start_dialog))
  194.     (and dcl_id (unload_dialog dcl_id))
  195.   )
  196.       )
  197.     )
  198.   )
  199.   (mapcar
  200.     (function
  201.       (lambda (a)
  202.   (mapcar  (function (lambda (b / tag key v)
  203.           (setq tag (cdr (assoc "字段" b)))
  204.           (setq key (cdr (assoc "key" b)))
  205.           (setq v (vl-some (function (lambda (c)
  206.                (if (= (car c) key)
  207.                  (cdr c)
  208.                )
  209.                    )
  210.                )
  211.                keys-gou
  212.             )
  213.           )
  214.           (or v (setq v "0"))
  215.           (cons tag v)
  216.         )
  217.     )
  218.     a
  219.   )
  220.       )
  221.     )
  222.     tiles-key
  223.   )
  224. );调用示例
  225. (setq tiles (list (list  (cons "编码" "1")
  226.       (cons "名称" "0")
  227.       (cons "供应商" "1")
  228.       (cons "CAD前视图祖玛" "0")
  229.       )
  230.       (list  (cons "孔位数" "1")
  231.       (cons "颜色" "0")
  232.       (cons "尺寸" "0")
  233.       (cons "备注" "0")
  234.       )
  235.       )
  236. )
  237. ($op-check$ tiles nil nil)


                               
登录/注册后可看大图


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 604个

财富等级: 财运亨通

发表于 2021-2-14 18:33:54 | 显示全部楼层
你这个看起来复杂了,我现在采用highflybird的办法:先规划好各Key,像button这种不需要写在一起,其它需要保存的写在一起,便于用repeat等一次处理。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 914个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 225个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 23:41 , Processed in 0.248402 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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