找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2222|回复: 5

[对话框] (XD::Dcl:ButtonAction)Button控件动作设置

[复制链接]
发表于 2014-10-6 08:46:32 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Dcl:ButtonAction
调用格式: (XD::Dcl:ButtonAction klst what)
参数说明: klst -- button 控件名或控件列表
what --回调函数 或 状态码
返回值:
函数简介: 又状态码确定回调函数
函数来源: 原创
函数作者: Free-Lancer
适用版本: 不限 
最后更新时间: 2014-10-10
备注: 定义交互或组件关联
演示图片: -

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

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

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

  1. ;|
  2. 仅定义按钮的回调函数
  3. what 只可以为 "callback" 或 ("callbakc1" "callback2" ...)
  4.            或 ("callback1" (int "callback2") ....)
  5.            或 (2 3 4 ...)
  6. 1 与图形交互时, what 为表 '(int callback) int 为dcl返回状态码 大于2
  7. 2 定义控件间关联动作时
  8.   a 单按钮 what 为 字符型回调函数名 _$klst 为控件名
  9.   b 多按钮 what 为 回调函数表
  10. 单键定义
  11. (xd::dcl:buttonaction "k1" "callback") 控件间关联
  12. (xd::dcl:buttonaction "k1" '(0 "callback"))结束对话框式回调
  13. 批量定义
  14. (xd::dcl:buttonaction '("k1" "k2" ...) '("callbakc1" (2 "callback2") ...))
  15. |;
  16. (defun XD::Dcl:ButtonAction (_$klst what / _sButtonAction)
  17.   (defun _sButtonAction        (_$key _$callback)
  18.     (cond
  19.       ((= (type _$callback) 'INT)
  20.        (action_tile
  21.          _$key
  22.          (strcat "(done_dialog " (itoa _$callback) ")")
  23.        )
  24.       )
  25.       ((= (type _$callback) 'STR)
  26.        (action_tile _$key (strcat "(" _$callback ")"))
  27.       )
  28.       (t)
  29.     )
  30.   )
  31.   (if (listp _$klst)
  32.     (while _$klst
  33.       (_sButtonAction (car _$klst) (car what))
  34.       (setq _$klst (cdr _$klst)
  35.             what   (cdr what)
  36.       )
  37.     )
  38.     (_sButtonAction _$klst _$callback)
  39.   )
  40. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2014-10-7 11:51:11 | 显示全部楼层
更新, 批量定义支持回调函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-7 22:53:59 | 显示全部楼层
更新,按钮总是要执行某些动作,对单个按钮,点下就执行,一个测试代码片断,尚未作出更多关联
  1. (defun c:tt (/                   _k2_callback         _k4_callback  _k5_callback
  2.              _k6_callback  strl                 fn               id
  3.             )
  4.   (defun _k4_callback ()
  5.     (xd::dcl:seterror "hello")
  6.   )

  7.   (setq        strl          '("temp:dialog {"
  8.                     "label = \"Button test\";"
  9.                     "  :boxed_row {"
  10.                     "    label = \"Input\";"
  11.                     "    :edit_box { label = \"Num1\"; key = \"k1\";}"
  12.                     "    :edit_box { label = \"Dist\"; key = \"k2\";}"
  13.                     "    :edit_box { label = \"Totle\"; key = \"k3\";}"
  14.                     "  }"
  15.                     "  :boxed_row{"
  16.                     "    label = \"button option\";"
  17.                     "    :button { label = \"calc\"; key = \"k4\";}"
  18.                     "    :button { label = \"Pick\"; key = \"k5\";}"
  19.                     "    :button { label = \"select\"; key = \"k6\";}"
  20.                     "  }"
  21.                     "  ok_cancel;"
  22.                     "  errtile;"
  23.                     "}"
  24.                    )
  25.         fn          (xd::dcl:make strl)
  26.         id          (xd::dcl:load fn "temp");_加载
  27.         what_next 2
  28.   )
  29.   (while (>= what_next 2)   
  30.     (XD::Dcl:ButtonAction
  31.       '("k4" "k2" "k5" "k6" "k1" "k3")
  32.       '("_k4_callback")
  33.     )
  34.     (xd::dcl:accept);_加载后先设置默认、定义动作
  35.     (setq what_next (xd::dcl:show));_设置完成后显示对话框,控制权交DCL
  36.   )
  37.   (xd::dcl:unload id fn)
  38.   (princ)
  39. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-12-8 15:22:03 | 显示全部楼层
发现个笔误;,修正如下:
最后面: (_sButtonAction _$klst_$callback)  应为:what
  1. (defun XD::Dcl:ButtonAction (_$klst what / _sButtonAction)
  2.   (defun _sButtonAction        (_$key _$callback)
  3.     (cond
  4.       ((= (type _$callback) 'INT)
  5.        (action_tile
  6.          _$key
  7.          (strcat "(done_dialog " (itoa _$callback) ")")
  8.        )
  9.       )
  10.       ((= (type _$callback) 'STR)
  11.        (action_tile _$key (strcat "(" _$callback ")"))
  12.       )
  13.       (t)
  14.     )
  15.   )
  16.   (if (listp _$klst)
  17.     (while _$klst
  18.       (_sButtonAction (car _$klst) (car what))
  19.       (setq _$klst (cdr _$klst)
  20.             what   (cdr what)
  21.       )
  22.     )
  23.     (_sButtonAction _$klst what)
  24.   )
  25. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

发表于 2016-6-6 09:13:52 | 显示全部楼层
1 与图形交互时, what 为表 '(int callback) int 为dcl返回状态码 大于2
而函数_sButtonAction        (_$key _$callback)中执行(T)
好像没有反应
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 08:16 , Processed in 0.366103 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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