从 AutoCAD 的任何一种输入设备中读取数值
(grread [track] [allkeys [curtype]])
只有特殊用途的 AutoLISP 应用程序才需调用本函数,AutoLISP 的大多数输入应使用各种 getxxx 函数来完成。
参数
track
如果提供该参数且其值不为 nil,则输入设备移动时,本函数能从定点设备中返回坐标。
allkeys
整数型,决定 grread 要执行的功能。allkeys 的几个位值相加可以获得组合功能。可以指定如下值:
1 (位0) 返回“拖动模式”坐标。如果设置了该位,而且用户只是移动定点设备而没有按下按钮或键盘,grread 函数就返回一个表,其第一个成员是类型代码 5,第二个成员是当前定点设备(鼠标或数字化仪)的位置坐标 (X,Y),这就是 AutoCAD 实现拖动的方法。
2 (位1) 返回所有的键值,包括功能键和光标键代码,用户按下光标键时并不移动光标。
4 (位2) 使用 curtype 参数传来的值控制光标的显示。
8 (位3) 在用户按下 ESC 键时不显示相应错误信息。
curtype
整数型,表明显示光标的类型。只有当 allkeys 参数的第二位为 1 时 curtype 参数才有效。该参数只控制当前 grread 函数调用时显示的光标类型。可以指定下列 curtype 值:
0 显示普通十字光标。
1 不显示光标(无十字光标)。
2 显示对象选择光标。
返回值
grread 函数返回一个表,其中第一个元素说明输入类型的代码,第二个元素既可能是整数,又可能是点,这取决于输入的类型。其返回值列表如下:
grread 函数的返回值 | |||
---|---|---|---|
第一个元素 |
第二个元素 | ||
值 |
输入类型 |
值 |
说明 |
2 |
键盘输入 |
各种 |
字符代码 |
3 |
选定点 |
三维点 |
点坐标 |
4 |
屏幕/下拉菜单项(通过定点设备选取) |
0 至 999 |
屏幕菜单项号 |
5 |
定点设备(仅在指定跟踪设备时返回) |
三维点 |
拖动模式坐标 |
6 |
BUTTONS 菜单项 |
0 至 999 1000 至 1999 2000 至 2999 3000 至 3999 |
BUTTONS1 菜单按钮号 BUTTONS2 菜单按钮号 BUTTONS3 菜单按钮号 BUTTONS4 菜单按钮号 |
7 |
TABLET1 菜单项 |
0 至 32767 |
数字化仪菜单的单元号 |
8 |
TABLET2 菜单项 |
0 至 32767 |
数字化仪菜单的单元号 |
9 |
TABLET3 菜单项 |
0 至 32767 |
数字化仪菜单的单元号 |
10 |
TABLET4 菜单项 |
0 至 32767 |
数字化仪菜单的单元号 |
11 |
AUX 菜单项 |
0 至 999 1000 至 1999 2000 至 2999 3000 至 3999 |
AUX1 菜单按钮号 AUX2 菜单按钮号 AUX3 菜单按钮号 AUX4 菜单按钮号 |
12 |
定点设备按钮(在类型 6或类型 11 后返回) |
三维点 |
点坐标 |
使用 grread 处理用户输入
当 grread 函数调用处于激活状态时,按下 ESC 键便可通过键盘中断 AutoLISP 程序的运行(除非指定的 allkeys 参数不允许这样做)。任何其他的输入都直接传给 grread 函数,这使得应用程序控制所有的输入设备。
如果用户在屏幕菜单项或下拉式菜单项上按下定点设备按钮,grread 函数返回一个类型为 6 或 11 的代码,但在随后的调用中,它并不返回类型代码 12。因为只有在屏幕的绘图区域中按下定点设备按钮,类型代码 12 才会跟随在类型代码 6 或 11 之后返回。
在试图用定点设备按钮或辅助按钮执行另一操作之前,将类型代码 12 的数据从缓冲区中清除,是非常重要的。为了做到这一点,可以执行如下嵌套的 grread 函数调用:
(setq code_12 (grread (setq code (grread))))
上述代码就象从输入流设备上获取输入一样,获取类型代码 12 的值表。
下面应该是风版的
(setq loop T)
(while loop
(setq code
(grread T 8))
(cond
((= (car code)
5)
(do_Move))
;;; 鼠标移动
((= (car code) 3)
(do_Left))
;;; 鼠标左键
((= (car code) 11)
(do_Right))
;;; 鼠标右键,右键设置为回车时
((= (car code) 25)
(do_Right))
;;; 鼠标右键,右键设置为屏幕菜单时
((equal code '(2 0))
(do_CTRL-@))
;;; CTRL-@
((equal code '(2 1))
(do_CTRL-A))
;;; CTRL-A
((equal code '(2 2))
(do_F9))
;;; CTRL-B或F9
((equal code '(2 3))
(do_F12))
;;; CTRL-C或F12
((equal code '(2 4))
(do_F6))
;;; CTRL-D或F6
((equal code '(2 5))
(do_F5))
;;; CTRL-E或F5
((equal code '(2 6))
(do_F3))
;;; CTRL-F或F3
((equal code '(2 7))
(do_F7))
;;; CTRL-G或F7
((equal code '(2 8))
(do_Back))
;;; CTRL-H或退格
((equal code '(2 9))
(do_Tab))
;;; CTRL-I或Tab
((equal code '(2 10))
(do_CTRL-J))
;;; CTRL-J
((equal code '(2 11))
(do_CTRL-K))
;;; CTRL-K
((equal code '(2 12))
(do_CTRL-L))
;;; CTRL-L
((equal code '(2 13))
(do_Return))
;;; CTRL-M或回车
((equal code '(2 14))
(do_CTRL-N))
;;; CTRL-N
((equal code '(2 15))
(do_F8))
;;; CTRL-O或F8
((equal code '(2 16))
(do_CTRL-P))
;;; CTRL-P
((equal code '(2 17))
(do_CTRL-Q))
;;; CTRL-Q
((equal code '(2 18))
(do_CTRL-R))
;;; CTRL-R
((equal code '(2 19))
(do_CTRL-S))
;;; CTRL-S
((equal code '(2 20))
(do_F4))
;;; CTRL-T或F4
((equal code '(2 21))
(do_F10))
;;; CTRL-U或F10
((equal code '(2 22))
(do_CTRL-V))
;;; CTRL-V
((equal code '(2 23))
(do_F11))
;;; CTRL-W或F11
((equal code '(2 24))
(do_CTRL-X))
;;; CTRL-X
((equal code '(2 25))
(do_CTRL-Y))
;;; CTRL-Y
((equal code '(2 26))
(do_CTRL-Z))
;;; CTRL-Z
((equal code '(2 27))
(do_CTRL-[))
;;; CTRL-[或ESC
((equal code '(2 28))
(do_CTRL-\))
;;; CTRL-\
((equal code '(2 29))
(do_CTRL-]))
;;; CTRL-]
((equal code '(2 30))
(do_CTRL-^))
;;; CTRL-^
((equal code '(2 31))
(do_CTRL-_))
;;; CTRL-_
((equal code '(2 32))
(do_Space))
;;; 空格键
((equal code '(2 33))
(do_ExclamationMark)) ;;; !键
((equal code '(2 34))
(do_DoubleQuote)) ;;;
"键
((equal code '(2 35))
(do_Hash))
;;; #键
((equal code '(2 36))
(do_Dollar))
;;; $键
((equal code '(2 37))
(do_Percent))
;;; %键
((equal code '(2 38))
(do_Ampersand)) ;;;
&键
((equal code '(2 39))
(do_Apostrophe)) ;;;
'键
((equal code '(2 40))
(do_OpenParenthesis)) ;;; (键
((equal code '(2 41)) (do_CloseParenthesis)) ;;;
)键
((equal code '(2 42))
(do_Asterisk))
;;; *键
((equal code '(2 43))
(do_Plus))
;;; +键
((equal code '(2 44))
(do_Comma))
;;; ,键
((equal code '(2 45))
(do_Minus))
;;; -键
((equal code '(2 46))
(do_Dot))
;;; .键
((equal code '(2 47))
(do_Slash))
;;; /键
((equal code '(2 48))
(do_0))
;;; 0键
((equal code '(2 49))
(do_1))
;;; 1键
((equal code '(2 50))
(do_2))
;;; 2键
((equal code '(2 51))
(do_3))
;;; 3键
((equal code '(2 52))
(do_4))
;;; 4键
((equal code '(2 53))
(do_5))
;;; 5键
((equal code '(2 54))
(do_6))
;;; 6键
((equal code '(2 55))
(do_7))
;;; 7键
((equal code '(2 56))
(do_8))
;;; 8键
((equal code '(2 57))
(do_9))
;;; 9键
((equal code '(2 58))
(do_Colon))
;;; :键
((equal code '(2 59))
(do_Semicolon)) ;;;
;键
((equal code '(2 60))
(do_LessThan))
;;; <键
((equal code '(2 61))
(do_Equals))
;;; =键
((equal code '(2 62))
(do_GreatThan)) ;;;
>键
((equal code '(2 63))
(do_QuestionMark)) ;;;
?键
((equal code '(2 64))
(do_At))
;;; @键
((equal code '(2 65))
(do_A))
;;; A键
((equal code '(2 66))
(do_B))
;;; B键
((equal code '(2 67))
(do_C))
;;; C键
((equal code '(2 68))
(do_D))
;;; D键
((equal code '(2 69))
(do_E))
;;; E键
((equal code '(2 70))
(do_F))
;;; F键
((equal code '(2 71))
(do_G))
;;; G键
((equal code '(2 72))
(do_H))
;;; H键
((equal code '(2 73))
(do_I))
;;; I键
((equal code '(2 74))
(do_J))
;;; J键
((equal code '(2 75))
(do_K))
;;; K键
((equal code '(2 76))
(do_L))
;;; L键
((equal code '(2 77))
(do_M))
;;; M键
((equal code '(2 78))
(do_N))
;;; N键
((equal code '(2 79))
(do_O))
;;; O键
((equal code '(2 80))
(do_P))
;;; P键
((equal code '(2 81))
(do_Q))
;;; Q键
((equal code '(2 82))
(do_R))
;;; R键
((equal code '(2 83))
(do_S))
;;; S键
((equal code '(2 84))
(do_T))
;;; T键
((equal code '(2 85))
(do_U))
;;; U键
((equal code '(2 86))
(do_V))
;;; V键
((equal code '(2 87))
(do_W))
;;; W键
((equal code '(2 88))
(do_X))
;;; X键
((equal code '(2 89))
(do_Y))
;;; Y键
((equal code '(2 90))
(do_Z))
;;; Z键
((equal code '(2 91))
(do_OpenSquareBracket)) ;;; [键
((equal code
'(2 92))
(do_BackSlash)) ;;;
\键
((equal code '(2 93)) (do_CloseSquareBracket))
;;; ]键
((equal code '(2 94))
(do_Caret))
;;; ^键
((equal code '(2 95))
(do_UnderScore)) ;;;
_键
((equal code '(2 96))
(do_BackQuote)) ;;;
`键
((equal code '(2 97))
(do_a))
;;; a键
((equal code '(2 98))
(do_b))
;;; b键
((equal code '(2 99))
(do_c))
;;; c键
((equal code '(2
100))(do_d))
;;; d键
((equal code '(2
101))(do_e))
;;; e键
((equal code '(2
102))(do_f))
;;; f键
((equal code '(2
103))(do_g))
;;; g键
((equal code '(2
104))(do_h))
;;; h键
((equal code '(2
105))(do_i))
;;; i键
((equal code '(2
106))(do_j))
;;; j键
((equal code '(2
107))(do_k))
;;; k键
((equal code '(2
108))(do_l))
;;; l键
((equal code '(2
109))(do_m))
;;; m键
((equal code '(2
110))(do_n))
;;; n键
((equal code '(2
111))(do_o))
;;; o键
((equal code '(2
112))(do_p))
;;; p键
((equal code '(2
113))(do_q))
;;; q键
((equal code '(2
114))(do_r))
;;; r键
((equal code '(2
115))(do_s))
;;; s键
((equal code '(2
116))(do_t))
;;; t键
((equal code '(2
117))(do_u))
;;; u键
((equal code '(2
118))(do_v))
;;; v键
((equal code '(2
119))(do_w))
;;; w键
((equal code '(2
120))(do_x))
;;; x键
((equal code '(2
121))(do_y))
;;; y键
((equal code '(2
122))(do_z))
;;; z键
((equal code '(2
123))(do_OpenBrace))
;;; {键
((equal code '(2
124))(do_VerticalBar)) ;;;
|键
((equal code '(2
125))(do_CloseBrace)) ;;;
}键
((equal code '(2
126))(do_Tilde))
;;; ~键
((equal code '(2
127))(do_Delete))
;;; Delete键
)
)
明经通道 版权所有 未经许可 不得传播 |
评论 |