- 积分
- 59782
- 明经币
- 个
- 注册时间
- 2005-11-29
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2014-9-19 02:50:18
|
显示全部楼层
本帖最后由 llsheng_73 于 2014-9-19 02:51 编辑
illcyt 发表于 2014-5-16 11:09
嗯,谢谢你的回复,现在明白了,这种命令编辑要用对话框来实现
如果清楚各个按钮所对应的命令或者函数的正确调用方法,想通过输入自己定义的命令来调用相应的功能而不想调出那个面板,那么可以建立edit_box的key值和对应功能的表,当按“确定”后,通过get_tile得到所自定义的命令与对应的功能函数关联,重新定义该功能的命令后再done_dialog
比如dialog里边有
:EDIT_box{label="功能2";key="key1";}
:EDIT_box{label="功能3";key="key2";}
...
:EDIT_box{label="功能n";key="keyn";}
这些控件都可以不用给它写action
:button{label="确定";key="OK";is_default=true;}
它所对应的action可以写为
(action_tile"OK" "(setq keys(mapcar'get_tile '(\"key1\" \"key2\" ... \"keyn\"))(done_dialog 1)")
有一个功能函数表functions'("fun1" "fun2" ... "funN") 与keys对应的话,接下来还有一个问题是怎么把functions定义为keys,由于defun 后边不能给它变量而只能直接给出sub,我能想到的办法是由程序写一个lisp文件,然后加载它进来,这样可以实现重定义
...(setq fileID(open "文件名" "a"));;;以追加方式写或者直接用"w"方式自己决定
(mapcar '(lambda(x y)
(if (check x )) ;;;check检查 x是否能作为函数名(好象不是所有字符都可以作为函数名,尤其是第一个字母,所以要自己写程序来检查)
(write (strcat "(defun c:" x "()(" y "))" fileID)))
keys functions)
(close fileID)
(load "文件名");;;从道理上说这样是可行的 |
|