尘缘一生 发表于 2025-7-15 21:05:28

不用回车的keyword;超级Key_getpoint;Key_entsel

本帖最后由 尘缘一生 于 2025-7-18 07:13 编辑

本坛http://bbs.mjtd.com/forum.php?mo ... 83057&highlight=key
帖子有段代码,写得比较晦涩
觉得这个还是不错,完善修改一下子
2025,7.18更新,源码发布,增加Key_getpointKey_entsel

2025.7.16再次改写
;不用回车的keyword-----(一级)-----
;Modify By SLdesign V3.0 尘缘一生 QQ:15290049
;按Key取Key|左键取点|其余键取缺省
;返回:目标key字符串或点
;例(Gets_Key_Word "\n->[实体(A)/钢筋砼(B)/素砼(Z)/墙体(4)/阳台(5)/卫生间(6)/厨房(7)]:<A>"'("A" "B" "Z" "4" "5" "6" "7") "A")
(defun Gets_Key_Word (msg lst def / bb pnum kw loop)
(setq lst (apply 'append (mapcar '(lambda (e) (list (ascii (strcase e)) (ascii (strcase e t)))) lst)) loop t)
(prompt msg)
(while loop
    (setq bb (grread nil 0) pnum (cadr bb))
    (cond
      ((member pnum lst) ;按到列表Key时
      (setq kw (strcase (chr pnum)) loop nil)
      )
      ((= (car bb) 3) ;左键,取点位
      (setq kw pnum loop nil)
      )
      (t ;其余键时,取缺省
      (setq kw (strcase def) loop nil)
      )
    )
)
kw
)
;测试,单独取Key----
(defun c:tt (/ key)
(setq key (Gets_Key_Word "\n->[实体(A)/钢筋砼(B)/素砼(Z)/墙体(4)/阳台(5)/卫生间(6)/厨房(7)]: <A>"'("A" "B" "Z" "4" "5" "6" "7") "A"))
key
)

[*];不用回车的keyword-----(一级)-----
[*];Modify By SLdesign V3.0 尘缘一生 QQ:15290049
[*];左键,右键,空格,回车,tab-->取缺省def字符
[*];例(Get_Key_Word "\n->[实体(1)/钢筋砼(2)/素砼(3)/墙体(4)/阳台(5)/卫生间(6)/厨房(7)]:<1>"'("1" "2" "3" "4" "5" "6" "7") "1")
[*];返回:目标key字符串
[*](defun Get_Key_Word (pro lst def / bb kw val)
[*](setq lst (apply 'append (mapcar '(lambda (e) (list (ascii (strcase e)) (ascii (strcase e t)))) lst)))
[*];把lst表变为 ascii码的双表
[*];'("1" "2" "3" "4"
[*] "5" "6" "7") -->'(49 49 50 50 51 51 52 52 53 53 54 54 55 55)
[*](prompt pro)
[*](while (not
[*]         (and
[*]             (setq bb (grread nil) val (car bb) kw (cadr bb)) ;(cadr kw)取得按键字母的ascii码 比如 49 50....
[*]             (if (or
[*]                   (member val '(11 25)) ;右键
[*]                   (member bb '((2 32))) ;空格
[*]                   (member bb '((2 13))) ;回车
[*]                   (member bb '((2 9))) ;;table 键
[*]                   (= val 3) ;左键
[*]               )
[*]               (setq kw (ascii def))
[*]               (member kw lst)
[*]             )
[*]         )
[*]         )
[*])
[*](strcase (vl-list->string (list kw)))
[*])
[*];测试----
[*](defun c:tt (/ key)
[*](setq key (Get_Key_Word "\n-> [实体(1)/钢筋砼(2)/素砼(3)/墙体(4)/阳台(5)/卫生间(6)/厨房(7)]:<1>"'("1" "2" "3" "4" "5" "6" "7") "1"))
[*]key
[*])


SLdesign V3.0
通过网盘分享的文件:三领设计
链接: https://pan.baidu.com/s/1-_P_9F2EKXcyFYAOCbtNfA?pwd=kfap 提取码: kfap



你有种再说一遍 发表于 2025-7-15 21:31:29

本帖最后由 你有种再说一遍 于 2025-7-15 22:19 编辑

觉得晦涩应该去敲c#,毕竟键盘钩子,秒了.
用钩子连cad自己的命令都可以实现这个.
无非就是执行命令事件:
判断缓存中已经存在值,以及遇到key输入时候给它+回车.

tranque 发表于 2025-7-16 12:55:44

你有种再说一遍 发表于 2025-7-15 21:31
觉得晦涩应该去敲c#,毕竟键盘钩子,秒了.
用钩子连cad自己的命令都可以实现这个.
无非就是执行命令事件:


C#宣传大使

自贡黄明儒 发表于 2025-7-17 09:44:14

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=183057&highlight=%B2%BB%D3%C3%BB%D8%B3%B5%B5%C4keyword

尘缘一生 发表于 2025-7-18 07:07:37

自贡黄明儒 发表于 2025-7-17 09:44
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=183057&highlight=%B2%BB%D3%C3%BB%D8%B3%B5%B5%C4keyw ...

就是看到此贴代码,但对于你写的没有测试,感觉依赖于系统,怕不能长久使用。

bai2000 发表于 2025-7-18 07:47:04

看做不错,举个实际应用例子呗

gzcsun 发表于 2025-8-8 22:38:59

你有种再说一遍 发表于 2025-7-15 21:31
觉得晦涩应该去敲c#,毕竟键盘钩子,秒了.
用钩子连cad自己的命令都可以实现这个.
无非就是执行命令事件:


觉得晦涩应该是你的lisp问题。
觉得对于CAD
最强的程序是c++,c#算什么。
最稳定是lisp。

你有种再说一遍 发表于 2025-8-8 22:52:47

本帖最后由 你有种再说一遍 于 2025-8-8 23:00 编辑

gzcsun 发表于 2025-8-8 22:38
觉得晦涩应该是你的lisp问题。
觉得对于CAD
最强的程序是c++,c#算什么。

你学了再说吧,先有核武器才能反对核武器.
但凡你知道C#和CPP在CAD上面的差异你就知道为什么推荐学C#了,
光是CPP配置能爆一堆VS向导错误,我都觉得你都搞不定.
Lisp会存在什么问题,你恐怕也是要学会第二门语言才知道

q530496591 发表于 2025-8-15 21:07:33

getpoint点了点后,就不能选择选项了。需要提前修改选项,然后按下空格确认后,再点。
页: [1]
查看完整版本: 不用回车的keyword;超级Key_getpoint;Key_entsel