本帖最后由 happy336 于 2019-7-18 22:22 编辑
AutoCAD文字和命令经常需要来回切换,在网上找到一段源码,目前不完美,先寻求帮助
设置前提:
1.ctrl+shift+0 英文
2.ctrl+shift+1 中文(搜狗输入法需要在搜狗自己程序设置菜单)
目前问题
1.目前自动切换只有mtext和mtedit能够完全识别(命令输入开始切中文,命令结束后切英文),ddedit无法完全识别(命令开始切中文,命令结束后无法切换英文)
2.其他问题待续。
源码如下
 - ;;;自定义弹出式对话框
- ;;(AlertDiy 显示内容 标题内容)
- (defun AlertDiy (str titlestr / shell a)
- (setq shell (vlax-create-object "WScript.Shell"))
- (setq a (vlax-invoke-method shell "Popup" str 0 titlestr 1));;确定取消按钮a=2,取消,a=1确定
- )
- ;cad输入法自动切换程序
- (vl-load-reactors)
- (vl-load-com)
- ;加密注册程序
- (setq shell (vlax-create-object "WScript.Shell"))
- (vlax-invoke shell "SendKeys" "+^0")
- ;cad命令输入反应器
- (if (not command_reactor)(setq command_reactor
- (vlr-command-reactor NIL '((:vlr-commandWillStart . Test1)))
- ))
- (defun test1(a b)
- (if (or (= (car b) "DDEDIT") (= (car b) "MTEDIT") (= (car b) "TEXT") (= (car b) "MTEXT"))
- (progn (vlax-invoke shell "SendKeys" "+^1")
- )
- (princ)
-
- ))
- ;;取消CAD命令反应器
- (if (not command_reactor)(setq command_reactor
- (vlr-command-reactor nil '((:vlr-commandCancelled . Test2)))
- ))
- (defun Test2(a b)
- (if (or (= (car b) "DDEDIT") (= (car b) "MTEDIT") (= (car b) "TEXT") (= (car b) "MTEXT"))
- (progn (vlax-invoke shell "SendKeys" "+^0")
- )
- )
- ;(vlax-invoke shell "SendKeys" "+^0")
- (princ)
-
- )
- ;;cad命令完成反应器
- (if (not command_reactor1)(setq command_reactor1
- (vlr-command-reactor NIL '((:vlr-commandEnded . Test3)))
- ))
- (defun test3(a b)
- (if (not (= (car b) "QSAVE"))
- (progn (vlax-invoke shell "SendKeys" "+^0");ctrl+shift+1为中文,ctrl+shift+0为英文
- )
- )
- ;(vlax-invoke shell "SendKeys" "+^0")
- (princ)
- )
-
|