明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 734|回复: 5

[经验] 介绍一个单击/双击快捷键启动不同程序的思路

[复制链接]
发表于 2021-12-4 23:20 | 显示全部楼层 |阅读模式
本帖最后由 masterlong 于 2021-12-4 23:45 编辑

这里说的【快捷键】
指的是【F1】~【F12】
而不是某些人将简写命令称作快捷键
个人一般通过mnu来修改快捷键的定义
修改方法可以见楼下

我是将【F6】设置为云线命令
【SHIFT+F6】设置为云线的设置命令
第一次按【F6】会启动设置程序
以后再按【F6】就直接选点绘制云线了
需要重新设置时按【SHIFT+F6】
实际使用过程中总感觉不是特别方便
因为有时我会错按成【ctrl+F6】
这是CAD默认的切换文档无法重定义

为了解决这个问题
我采取的做法是将云线程序做了改造
按【F6】记录按键的时间
并与上一次记录的时间进行比较
判定是连击就启动设置程序

下面是模拟代码供大家参考
注意事项在代码中有详细的注解
(defun c:1or2()
        ;;是否首次按键
        (if oldimmtime
                ;;非首次
                (progn
                        (setq immtime (getvar "TDUSRTIMER"))
                        ;;判断是否双击
                        (if (> 0.2 (* (- immtime oldimmtime) 86400))
                                ;;双击
                                (progn
                                        ;;设置黑板变量
                                        (setq oldimmtime immtime)
                                        (vl-propagate 'oldimmtime)
                                       
                                        (alert "启动“设置程序”")
                                )
                                ;;单击
                                (progn
                                        ;;设置黑板变量
                                        (setq oldimmtime immtime)
                                        (vl-propagate 'oldimmtime)
                                       
                                                        ;;;;;;注意:在判断【是单击】的后续代码中,不要【立即】出现警告窗口或者对话框,否则无法进入到【第2次按键】这个阶段。
                                                        ;;;;;;如下代码是不行的
                                                        ;;;;;;(alert "本次为单击,连击快捷键可启动“设置程序”")
                                                        
                                                        ;;;;;;交互类函数是允许的。当然,出错处理函数,要针对【2次按键导致的程序中断】做相应的处理。
                                                        ;;;;;;本程序仅为模拟,未给出出错处理代码
                                                        (princ "本次为单击,连击快捷键可启动“设置程序”")
                                                        (princ "\n指定选择集....")
                                                        (ssget)
                                )
                        )
                )
                ;;首次
                (progn
                        ;;设置黑板变量
                        (setq oldimmtime (getvar "TDUSRTIMER"))
                        (vl-propagate 'oldimmtime)
                        
                        (alert "首次按键,启动“设置程序”")
                )
        )
(princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-12-5 18:25 | 显示全部楼层
本帖最后由 masterlong 于 2021-12-26 17:40 编辑

补充一下
如果需要区分
程序启动是命令行输入或快捷键调用
那么可以将
(setq immtime (getvar "TDUSRTIMER"))这一句
移出放到mnu的宏语句中

["F6"]^C^C^P(setq immtime (getvar "TDUSRTIMER"));1or2;

相应模拟程序修改如下
(defun c:1or2()
        (if (null immtime)
                ;;非【F6】调用程序
                (progn
                        (alert "非【F6】调用,正常执行程序。")
                )
                ;;按【F6】调用程序
                (progn
                        ;;是否首次按键
                        (if oldimmtime
                                ;;非首次
                                (progn
                                        ;;判断是否双击
                                        (if (> 0.2 (* (- immtime oldimmtime) 86400))
                                                ;;双击
                                                (progn
                                                        ;;设置黑板变量
                                                        (setq oldimmtime immtime)
                                                        (vl-propagate 'oldimmtime)
                                                        
                                                        (alert "双击【F6】,启动“设置程序”")
                                                )
                                                ;;单击
                                                (progn
                                                        ;;设置黑板变量
                                                        (setq oldimmtime immtime)
                                                        (vl-propagate 'oldimmtime)
                                                        
                                                                        ;;;;;;注意:在判断【是单击】的后续代码中,不要【立即】出现警告窗口或者对话框,否则无法进入到【第2次按键】这个阶段。
                                                                        ;;;;;;如下代码是不行的
                                                                        ;;;;;;(alert "本次为单击,连击快捷键可启动“设置程序”")
                                                                        
                                                                        ;;;;;;交互类函数是允许的。当然,出错处理函数,要针对【2次按键导致的程序中断】做相应的处理。
                                                                        ;;;;;;本程序仅为模拟,未给出出错处理代码
                                                                        (princ "单击【F6】,执行主程序。连击快捷键可启动“设置程序”")
                                                                        (princ "指定选择集....")
                                                                        (ssget)
                                                                        
                                                )
                                        )
                                )
                                ;;首次
                                (progn
                                        ;;设置黑板变量
                                        (setq oldimmtime (getvar "TDUSRTIMER"))
                                        (vl-propagate 'oldimmtime)
                                       
                                        (alert "首次按键【F6】,启动“设置程序”")
                                )
                        )
                )
        )
        
        ;;程序结尾处以及出错处理函数,都将immtime清空
        (setq immtime NIL)
(princ)
)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-4 23:37 | 显示全部楼层
简单介绍下如何针对mnu进行设置

mnu文件中先找到下面的文字
***ACCELERATORS
此后到下一个***
就是CAD系统允许的快捷键设置位置
允许的按键设置如下

-----------------------------------------------------------模式0
["F9"]^c^c^p(set图纸比例);
[CONTROL+"F9"]^c^c^p(set图纸比例);
[SHIFT+"F9"]^c^c^p(set图纸比例);
/////[CONTROL+"F6"]    /////系统默认是切换文档无法重定义

-----------------------------------------------------------模式1
/////下面CONTROL+【x】都属于可用的组合
/////【X】= 数字或字母
/////SHIFT、ALT+【x】无效
[CONTROL+"8"]^c^c^p(set图纸比例);
[CONTROL+"A"]^c^c^p(set图纸比例);

-----------------------------------------------------------模式2
/////下面CONTROL+【x】都属于可用的组合
/////【X】= 方向键上方的6个功能键
/////其它的如print、pause、break等均不行
/////SHIFT、ALT+【x】无效
[CONTROL+"insert"]^c^c^p(set图纸比例);
[CONTROL+"HOME"]^c^c^p(set图纸比例);

模式0适用于首贴所讲的方法
另外
F2、F3、F8、F10、F11我认为是需要保留的
最好不要动它们的原始设定
发表于 2021-12-6 09:25 | 显示全部楼层
谢谢“masterlong”分享,好东西啊!
发表于 2021-12-8 10:11 | 显示全部楼层
学习了学习了
发表于 2021-12-8 10:40 | 显示全部楼层
学到了学到了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-23 15:32 , Processed in 0.288928 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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