找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1343|回复: 1

[教学] API应用 DCL之Button及List测试

[复制链接]
发表于 2014-10-10 17:31:21 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Free-Lancer 于 2014-10-10 17:32 编辑

  1. (defun c:tt (/              strl     fn        id         what_next
  2.              _Fromdrawing      k1        k2         fill          lst1
  3.              lst2     result
  4.             )
  5.   ;;通过选择获取 list 填充用的表
  6.   (defun _Fromdrawing (mod / ss e el)
  7.     (cond
  8.       ((= mod 2)
  9.        (if (setq ss (ssget '((0 . "*line,arc,circle,ellipse"))))
  10.          (progn
  11.            (setq lst1
  12.                   (mapcar '(lambda (x)
  13.                              (vl-princ-to-string (cadr (xdrx_getarea x)))
  14.                            )
  15.                           (xdrx_pickset->ents ss)
  16.                   )
  17.            ) ;_构造表一用的填充表
  18.          )
  19.        )
  20.       )
  21.       ((= mod 3)
  22.        (while (and (setq e (car (entsel "\nPick text: ")))
  23.                    (setq el (entget e))
  24.                    (= (cdr (assoc 0 el)) "TEXT")
  25.               )
  26.          (setq lst2 (cons (cdr (assoc 1 el)) lst2))
  27.        ) ;_构造表二用的填充表
  28.       )
  29.       (t)
  30.     )
  31.   )
  32.   (defun _calc ()
  33.     (set_tile
  34.       "k7"
  35.       (vl-princ-to-string
  36.         (apply '+ (mapcar 'distof (xd::dcl:gettile '("k3" "k5"))))
  37.       )
  38.     )
  39.   )
  40.   (defun fill (mod /)
  41.     (if        (= mod 1)
  42.       (set_tile "k3" k1) ;_ list 1 的值
  43.       (set_tile "k5" k2) ;_ list 2 的值
  44.     )
  45.   ) ;_将 List 选择填入 edit_box
  46.   (setq        strl          '("temp:dialog{"
  47.                     "label = \"button test\";"
  48.                     "  :row{"
  49.                     "    :list_box {label = \"num\"; width = 8; height = 12; key = \"k1\";}"
  50.                     "    :list_box {label = \"dist\"; width = 8; height = 12; key = \"k2\";}"
  51.                     "  }"
  52.                     "  :row{"
  53.                     "    :edit_box {width = 6;key = \"k3\";}"
  54.                     "    :text {width = 4;key=\"k4\";value = \"+\";}"
  55.                     "    :edit_box {width = 6; key = \"k5\";}"
  56.                     "    :text {width = 4; key = \"k6\"; value = \"=\";}"
  57.                     "    :edit_box { width = 6; key = \"k7\";}"
  58.                     "  }"
  59.                     "  :row {"
  60.                     "    :button {label = \"Select\"; width = 6; key = \"k8\";}"
  61.                     "    :button {label = \"Pick\"; width = 6; key = \"k9\";}"
  62.                     "    :button {label = \"Calc\"; width = 6; key = \"k10\";}"
  63.                     "  }"
  64.                     "  ok_cancel;"
  65.                     "  errtile;"
  66.                     "}"
  67.                    )
  68.         fn          (xd::dcl:make strl)
  69.         what_next 2
  70.         result          '("k7") ;_点击ok 时获取的 key $value列表
  71.   )
  72.   (while (>= what_next 2)
  73.     (setq id (xd::dcl:load fn "temp")) ;_有回调函数时需要将 load 放到循环体内
  74.     (xd::dcl:buttonaction
  75.       '("k8" "k9" "k10")
  76.       '(2 3 "_calc") ;_按钮的回调函数
  77.     ) ;_定义按钮动作
  78.     (xd::dcl:listaction
  79.       '("k1" "k2")
  80.       '(lst1 lst2) ;_在 按钮动作时 获取列表      
  81.       nil;_不确定索引
  82.       '("fill 1" "fill 2");_回调函数,可以带参数
  83.     ) ;_定义 list 的关联动作
  84.     (xd::dcl:accept 'result) ;_定义 ok cancel , 获取 ok 后需要的控件值
  85.     (setq what_next (xd::dcl:show)) ;_控制权交给 DCL
  86.     (_Fromdrawing what_next);_图形交互时执行的函数
  87.   )
  88.   (if (= what_next 1)
  89.     (progn
  90.       (princ (car result))
  91.     )
  92.   )
  93.   (xd::dcl:unload id fn)
  94.   (princ)
  95. )
test1.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2016-5-8 22:12:37 | 显示全部楼层
终于找到我想要的案例了,我要好好参考参考,学习学习!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:20 , Processed in 0.408521 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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