找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4482|回复: 23

[对话框] (XD::Dcl:ListAction)批量列表填充及动作定义

[复制链接]
发表于 2014-10-6 09:03:32 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Dcl:ListAction
调用格式: (XD::Dcl:ListAction _$klst $val _$itemL _$callbackL)
参数说明: _$klst -- 控件名或控件名列表
_$val -- 列表内容变量名或变量名列表
_$itemL -- 索引或索引表 或 nil
_$callbackL -- 回调函数表 或 nil
返回值:
函数简介: addlist 与 action_tile 二合一
函数来源: 原创
函数作者: Free-Lancer
适用版本: 不限 
最后更新时间: 2014-10-10
备注: -
演示图片: -

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

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

×
本帖最后由 Free-Lancer 于 2014-10-10 20:13 编辑

  1. (defun XD::Dcl:ListAction (_$klst        _$val             _$itemL
  2.                            _$callbackL        /             _sListAction
  3.                           )
  4.   (defun _sListAction (_$key _val _$callback)
  5.     (if        (and _$val (eval _val))
  6.       (if _$callback
  7.         (action_tile
  8.           _$key
  9.           (strcat
  10.             "(set (read  \""
  11.             _$key
  12.             "\") "
  13.             "(if (distof $value) "
  14.             "(nth (atoi $value) "
  15.             (vl-symbol-name _val)
  16.             ")"
  17.             "(if (xdrx_string_split $value \" \")"
  18.             "(mapcar '(lambda (x) (nth (atoi x) "
  19.             (vl-symbol-name _val)
  20.             "))(xdrx_string_split $value \" \")))))"
  21.             "("
  22.             _$callback
  23.             ")"
  24.           )
  25.         ) ;_记录索引并设定 action
  26.         (action_tile
  27.           _$key
  28.           (strcat "(set  (read \""
  29.                   _$key
  30.                   "\") (nth (atoi $value) "
  31.                   (vl-symbol-name _val)
  32.                   "))"
  33.           )
  34.         ) ;_仅记录索引项
  35.       )
  36.     )
  37.   )
  38.   (XD::DCL:AddList _$klst _$val _$itemL)
  39.   (if (= (type _$klst) 'STR)
  40.     (_sListAction _$klst _$val _$callbackL)
  41.     (while _$klst
  42.       (if (or _$klst _$val _$callbackL)
  43.         (_sListAction (car _$klst) (car _$val) (car _$callbackL))
  44.       )
  45.       (setq _$klst        (cdr _$klst)
  46.             _$val        (cdr _$val)
  47.             _$callbackL        (cdr _$callbackL)
  48.       )
  49.     )
  50.   )
  51. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2014-10-6 09:37:38 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-10-10 20:42 编辑

一个示例

listaction.gif

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

发表于 2014-10-6 21:18:28 | 显示全部楼层
(strcat "(setq "
                         (vl-symbol-name z)
                         " (nth (atoi $value) "
                         (vl-symbol-name y)
                         "))"
                 )

悄悄的学习了!

点评

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

使用道具 举报

 楼主| 发表于 2014-10-6 21:41:25 来自手机 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-10-6 21:45 编辑
77077 发表于 2014-10-6 21:18
(strcat "(setq "
                         (vl-symbol-name z)
                         " (nth (atoi ...


呵呵,这是封装的关键
action 动作要 string ,而 lisp 的变量名与值是统一的,仅取名字是要 ' ,另外还有 vl-symbol-name / value 为这种应用提供了可能

点评

Free-Lancer 大师,之个示例,我用之前你封装的那个函数lib-dcl 是可以正常运行,默认的图层在列表中亮显,如果设定的默认图层不存在就报参数类型错误: fixnump: nil, 但是现在用你的这些新函数测试, 发现,1.默认  详情 回复 发表于 2014-10-10 16:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-10-10 16:19:54 | 显示全部楼层
本帖最后由 lucas3 于 2014-10-10 20:40 编辑
Free-Lancer 发表于 2014-10-6 21:41
呵呵,这是封装的关键
action 动作要 string ,而 lisp 的变量名与值是统一的,仅取名字是要 ' ,另外 ...

Free-Lancer 大师,之个示例,用你的这些新函数测试, 发现,1.默认的图层不存在也不报错, 2.运行后,默认的图层也不亮显,贴出完整的代码与演示供分析!
1.默认的图层不存在也不报错,命令栏仍然显示选择的是0与1
1.gif

2.默认的图层也不亮显
2.gif



点评

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

使用道具 举报

 楼主| 发表于 2014-10-10 17:29:52 | 显示全部楼层
lucas3 发表于 2014-10-10 16:19
Free-Lancer 大师,之个示例,我用之前你封装的那个函数lib-dcl 是可以正常运行,默认的图层在列表中亮显 ...

2014.10.10 更新,修改回调函数定义

点评

大师,替换函数后显示:参数太少 …… 好像您这一跟新,又跟XDAPI 搭上关系了  详情 回复 发表于 2014-10-10 18:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-10-10 18:31:15 | 显示全部楼层
本帖最后由 lucas3 于 2014-10-10 18:45 编辑
Free-Lancer 发表于 2014-10-10 17:29
2014.10.10 更新,修改回调函数定义

大师,替换函数后(dcl:listaction 与dcl:addlist  都替换了)显示:参数太少 …… 好像您这一更新,又跟XDAPI 搭上关系了{:soso_e109:}


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-10-10 18:43:48 来自手机 | 显示全部楼层
lucas3 发表于 2014-10-10 18:31
大师,替换函数后显示:参数太少 …… 好像您这一跟新,又跟XDAPI 搭上关系了

这个即使搭上关系也用不到api, 开源的自己收集即可

点评

里面有 xdrx_string_split $value 难道不需要API吗,大师?  详情 回复 发表于 2014-10-10 18:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-10-10 18:48:26 | 显示全部楼层
st788796 发表于 2014-10-10 18:43
这个即使搭上关系也用不到api, 开源的自己收集即可

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-10-10 18:59:40 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-10-10 19:02 编辑
lucas3 发表于 2014-10-10 18:48
里面有 xdrx_string_split $value 难道不需要API吗,大师?


这个是在多选时分割函数,太简单了,自己替换
API有这么可怕?
用API 多了一条阳关大道,没必要总在小巷子里转悠

点评

太强大了,不敢用,能力有限,(另外一个重要原因是,更新频繁,万一哪天,关键时刻API时间到了,用不了了,又没有网络,又或者晓东论坛访问不上了,那不是……)只是为什么加载API后一样显示参数太少  详情 回复 发表于 2014-10-10 19:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-10-10 19:15:20 | 显示全部楼层
st788796 发表于 2014-10-10 18:59
这个是在多选时分割函数,太简单了,自己替换
API有这么可怕?

太强大了,不敢用{:soso_e113:},能力有限,(另外一个重要原因是,更新频繁,万一哪天,关键时刻API时间到了,用不了了,又没有网络,又或者晓东论坛访问不上了,那不是……)只是为什么加载API后一样显示参数太少, 还是请Free-Lancer大师来指点一下吧,随便如果不用API那就太好了,{:soso_e179:}

点评

增加了一个参数,用于支持自定义回调函数, 填 nil 如果不进行动作定义就用 xd::dcl:addlist  详情 回复 发表于 2014-10-10 19:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 19:28:49 | 显示全部楼层
lucas3 发表于 2014-10-10 19:15
太强大了,不敢用,能力有限,(另外一个重要原因是,更新频繁,万一哪天,关键时刻API时间 ...


增加了一个参数,用于支持自定义回调函数, 填 nil

如果不进行动作定义就用 xd::dcl:addlist

点评

大师,不懂啊,你能帮忙把5楼的代码修改了能正常使用吗?  详情 回复 发表于 2014-10-10 19:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-10-10 19:48:06 | 显示全部楼层
Free-Lancer 发表于 2014-10-10 19:28
增加了一个参数,用于支持自定义回调函数, 填 nil

如果不进行动作定义就用 xd::dcl:addlist

大师,不懂啊,你能帮忙把5楼的代码修改了能正常使用吗?

点评

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

使用道具 举报

 楼主| 发表于 2014-10-10 20:14:44 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-10-10 20:44 编辑
lucas3 发表于 2014-10-10 19:48
大师,不懂啊,你能帮忙把5楼的代码修改了能正常使用吗?

感谢测试,重新下载一楼函数
  1. (defun c:tt (/ strl lyrlst fn id)
  2.   (setq        strl   '("temp:dialog {"
  3.                  "label = \"List text\";"
  4.                  ":row  {"
  5.                  ":list_box { key = \"lyr1\"; height = 16; width = 8;}"
  6.                  ":list_box { key = \"lyr2\"; height = 16; width = 8;}"
  7.                  "}"
  8.                  "ok_cancel;}"
  9.                 )
  10.         lyrlst (fy:table "layer")
  11.         fn     (xd::dcl:make strl)
  12.         id     (xd::dcl:load fn "temp")
  13.   )
  14.   (xd::dcl:listaction
  15.     '("lyr1" "lyr2") ;_key list, 单个列表时用 key string
  16.     '(lyrlst lyrlst) ;_引用的变量名,加 ', 单个列表时 'lyrlst
  17.     '(0 0) ;_lyr1 lyr2 为全局变量, 指定初始索引
  18.     nil;_ 不指定回调函数时记录索引值
  19.   )
  20.   (xd::dcl:accept nil);_不取值仅定义 ok cancel
  21.   (if (= (xd::dcl:start id fn) 1)
  22.     (progn
  23.       (princ (strcat "\nListBox1 select " lyr1))
  24.       (princ (strcat "\nListBox2 select " lyr2))
  25.     )
  26.   )
  27.   (princ)
  28. )

点评

大师,好像还有问题,可是当我运行后,0层是处于亮显状态,但是当我不更改图层(不选择其它图层),而是直接按下确定,就会显示“; 错误: 参数类型错误: stringp nil” (xd::dcl:listaction '("lyr1" "lyr2")  详情 回复 发表于 2014-10-10 21:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-10-10 21:16:10 | 显示全部楼层
Free-Lancer 发表于 2014-10-10 20:14
感谢测试,重新下载一楼函数

大师,好像还有问题,可是当我运行后,0层是处于亮显状态,但是当我不更改图层(不选择其它图层),而是直接按下确定,就会显示“; 错误: 参数类型错误: stringp nil  
;;===============================
(xd::dcl:listaction
    '("lyr1" "lyr2") ;_key list, 单个列表时用 key string
    '(lyrlst lyrlst) ;_引用的变量名,加 ', 单个列表时 'lyrlst
    '(0 0) ;_lyr1 lyr2 为全局变量, 指定初始索引
    nil;_ 不指定回调函数时记录索引值
  );;===============================
另外这里的代码中红色的'(0 0) 是什么意思啊? 怎么改默认图层名呢? 另外当选择一次后,要记住选择的


点评

'(0 0) 代表两个表的默认索引项都是 0 ,如果第一个指定 0 层,第二个指定 1 层,也可以用 '("0" "1") 另外你这个提示是不是没有更新 xd::dcl:accept 函数所致,这个函数增加了一个参数,用来收集指定控件的 $val  详情 回复 发表于 2014-10-10 22:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 12:13 , Processed in 0.491701 second(s), 76 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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