明经通道 AutoLISP 函数   
grread
 

从 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
1001 至 1999
2001 至 2999
3001 至 3999
如此直到
16001 至 16999 

屏幕菜单项号
POP1 菜单项号
POP2 菜单项号
POP3 菜单项号
....如此直到
POP16 菜单项号

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键
  )
)

明经通道 版权所有 未经许可 不得传播

 评论