이 함수는 현재 마우스의 위치와 클릭을 했는지, 키보드를 입력했다면 어떤 것을 입력했는지를 반환하기 때문에 각 입력에 따른 별도의 기능을 부여할 수 있다는 장점이 있다.
grread 는 (grread 't 15 2) 이와 같이 두쌍의 숫자를 옵션으로 가지고 있는데.. 앞의 숫자는 반환값에 대한 것. 뒤의 숫자는 커서의 모양을 제어하는 것이다.
앞의 숫자는 다음과 같다.
1 (bit 0) : 움직이는 좌표와 키보드 동작을 반환
2 (bit 1) : 움직이는 좌표와 펑션키를 포함한 모든 키를 반환
4 (bit 2) : 커서키를 제어하는 뒤쪽의 숫자를 반영함. 이 비트를 선택하지 않으면, 뒷의 커서제어가 먹지 않음.
8 (bit 3) : 에러메시지를 억제함.
뒤의 숫자는 다음과 같다.
0 : 십자선만 있고, 오스냅박스를 감춤
1 : 커서를 감춤 (십자선 감춤) 즉, 화면에 아무 것도 나타나지 않음
2 : 객체선택사각 (PickBox)만 나타남
그러므로, 만약 객체선택사각으로 기능을 제어할 때는
(grread 't (+ 1 4 8) 2) 로 해주면 된다.
그리고, 현재 사용하는 커서 모양을 유지하면서 좌표를 얻고 싶으면
(grread 't (+ 1 8) 0) 인데, 4비트가 포함될 경우에는 뒤쪽 숫자가 의미 없으므로,
(grread 't (+ 1 8)) 처럼 앞 숫자만 있어도 무방하다.
이 함수를 돌린 결과는 두개의 쌍으로 반환되는데..
마우스 이동 : (3 (좌표)) , 이동중인 좌표, 계속 변경됨
마우스 클릭 : (5 (좌표)) , 클릭한 점의 고정 좌표
오른쪽 마우스클릭 : (25 (화면에 대한 마우스 x축 위치)
만약 1920x1080 화면이고, 마우스가 왼쪽 끝에 있다면 30 정도를 반환함
키보드 입력 : (2 (키보드고유번호))
이 때, 각 키보드에 대한 고유번호는 아래와 같다.
;;;=============================================================================;
;; grread 키보드 고유번호 정리
;; 2017. 01. izzarder.com
;;;=============================================================================;
(defun c:xxx ( / code)
(while
(progn
(setq code (grread T 9))
(cond
((= (car code) 5) T)
((= (car code) 3) (princ "do_LeftClick"))
((= (car code) 11) (princ "do_RightClick"))
((= (car code) 25) (princ "do_RightClick"))
((equal code '(2 0)) (princ "do_CTRL-@"))
((equal code '(2 1)) (princ "do_CTRL-A"))
((equal code '(2 2)) (princ "do_F9"))
((equal code '(2 3)) (princ "do_F12"))
((equal code '(2 4)) (princ "do_F6"))
((equal code '(2 5)) (princ "do_F5"))
((equal code '(2 6)) (princ "do_F3"))
((equal code '(2 7)) (princ "do_F7"))
((equal code '(2 8)) (princ "do_Back"))
((equal code '(2 9)) (princ "do_Tab"))
((equal code '(2 10)) (princ "do_CTRL-J"))
((equal code '(2 11)) (princ "do_CTRL-K"))
((equal code '(2 12)) (princ "do_CTRL-L"))
((equal code '(2 13)) (princ "do_Return"))
((equal code '(2 14)) (princ "do_CTRL-N"))
((equal code '(2 15)) (princ "do_F8"))
((equal code '(2 16)) (princ "do_CTRL-P"))
((equal code '(2 17)) (princ "do_CTRL-Q"))
((equal code '(2 18)) (princ "do_CTRL-R"))
((equal code '(2 19)) (princ "do_CTRL-S"))
((equal code '(2 20)) (princ "do_F4"))
((equal code '(2 21)) (princ "do_F10"))
((equal code '(2 22)) (princ "do_CTRL-V"))
((equal code '(2 23)) (princ "do_F11"))
((equal code '(2 24)) (princ "do_CTRL-X"))
((equal code '(2 25)) (princ "do_CTRL-Y"))
((equal code '(2 26)) (princ "do_CTRL-Z"))
((equal code '(2 27)) (princ "do_CTRL-["))
((equal code '(2 28)) (princ "do_CTRL-\\"))
((equal code '(2 29)) (princ "do_CTRL-]"))
((equal code '(2 30)) (princ "do_CTRL-^"))
((equal code '(2 31)) (princ "do_CTRL-_"))
((equal code '(2 32)) (princ "do_Space"))
((equal code '(2 33)) (princ "do_ExclamationMark"))
((equal code '(2 34)) (princ "do_DoubleQuote"))
((equal code '(2 35)) (princ "do_Hash"))
((equal code '(2 36)) (princ "do_Dollar"))
((equal code '(2 37)) (princ "do_Percent"))
((equal code '(2 38)) (princ "do_Ampersand"))
((equal code '(2 39)) (princ "do_Apostrophe"))
((equal code '(2 40)) (princ "do_OpenParenthesis"))
((equal code '(2 41)) (princ "do_CloseParenthesis"))
((equal code '(2 42)) (princ "do_Asterisk"))
((equal code '(2 43)) (princ "do_Plus"))
((equal code '(2 44)) (princ "do_Comma"))
((equal code '(2 45)) (princ "do_Minus"))
((equal code '(2 46)) (princ "do_Dot"))
((equal code '(2 47)) (princ "do_Slash"))
((equal code '(2 48)) (princ "do_0"))
((equal code '(2 49)) (princ "do_1"))
((equal code '(2 50)) (princ "do_2"))
((equal code '(2 51)) (princ "do_3"))
((equal code '(2 52)) (princ "do_4"))
((equal code '(2 53)) (princ "do_5"))
((equal code '(2 54)) (princ "do_6"))
((equal code '(2 55)) (princ "do_7"))
((equal code '(2 56)) (princ "do_8"))
((equal code '(2 57)) (princ "do_9"))
((equal code '(2 58)) (princ "do_Colon"))
((equal code '(2 59)) (princ "do_Semicolon"))
((equal code '(2 60)) (princ "do_LessThan"))
((equal code '(2 61)) (princ "do_Equals"))
((equal code '(2 62)) (princ "do_GreatThan"))
((equal code '(2 63)) (princ "do_QuestionMark"))
((equal code '(2 64)) (princ "do_At"))
((equal code '(2 65)) (princ "do_A"))
((equal code '(2 66)) (princ "do_B"))
((equal code '(2 67)) (princ "do_C"))
((equal code '(2 68)) (princ "do_D"))
((equal code '(2 69)) (princ "do_E"))
((equal code '(2 70)) (princ "do_F"))
((equal code '(2 71)) (princ "do_G"))
((equal code '(2 72)) (princ "do_H"))
((equal code '(2 73)) (princ "do_I"))
((equal code '(2 74)) (princ "do_J"))
((equal code '(2 75)) (princ "do_K"))
((equal code '(2 76)) (princ "do_L"))
((equal code '(2 77)) (princ "do_M"))
((equal code '(2 78)) (princ "do_N"))
((equal code '(2 79)) (princ "do_O"))
((equal code '(2 80)) (princ "do_P"))
((equal code '(2 81)) (princ "do_Q"))
((equal code '(2 82)) (princ "do_R"))
((equal code '(2 83)) (princ "do_S"))
((equal code '(2 84)) (princ "do_T"))
((equal code '(2 85)) (princ "do_U"))
((equal code '(2 86)) (princ "do_V"))
((equal code '(2 87)) (princ "do_W"))
((equal code '(2 88)) (princ "do_X"))
((equal code '(2 89)) (princ "do_Y"))
((equal code '(2 90)) (princ "do_Z"))
((equal code '(2 91)) (princ "do_OpenSquareBracket"))
((equal code '(2 92)) (princ "do_BackSlash"))
((equal code '(2 93)) (princ "do_CloseSquareBracket"))
((equal code '(2 94)) (princ "do_Caret"))
((equal code '(2 95)) (princ "do_UnderScore"))
((equal code '(2 96)) (princ "do_BackQuote"))
((equal code '(2 97)) (princ "do_a"))
((equal code '(2 98)) (princ "do_b"))
((equal code '(2 99)) (princ "do_c"))
((equal code '(2 100))(princ "do_d"))
((equal code '(2 101))(princ "do_e"))
((equal code '(2 102))(princ "do_f"))
((equal code '(2 103))(princ "do_g"))
((equal code '(2 104))(princ "do_h"))
((equal code '(2 105))(princ "do_i"))
((equal code '(2 106))(princ "do_j"))
((equal code '(2 107))(princ "do_k"))
((equal code '(2 108))(princ "do_l"))
((equal code '(2 109))(princ "do_m"))
((equal code '(2 110))(princ "do_n"))
((equal code '(2 111))(princ "do_o"))
((equal code '(2 112))(princ "do_p"))
((equal code '(2 113))(princ "do_q"))
((equal code '(2 114))(princ "do_r"))
((equal code '(2 115))(princ "do_s"))
((equal code '(2 116))(princ "do_t"))
((equal code '(2 117))(princ "do_u"))
((equal code '(2 118))(princ "do_v"))
((equal code '(2 119))(princ "do_w"))
((equal code '(2 120))(princ "do_x"))
((equal code '(2 121))(princ "do_y"))
((equal code '(2 122))(princ "do_z"))
((equal code '(2 123))(princ "do_OpenBrace"))
((equal code '(2 124))(princ "do_VerticalBar"))
((equal code '(2 125))(princ "do_CloseBrace"))
((equal code '(2 126))(princ "do_Tilde"))
((equal code '(2 127))(princ "do_Delete"))
( t )
)
)
)
)
아래 구문을 돌려 보면 어떤 기능을 하는 것인지 아마도 확실히 알 수 있을 것이다.
;;;=============================================================================;
;; grread 예제
;; 2017. 01. izzarder.com
;;;=============================================================================;
(defun c:xxx ( / grdata code data)
(while
(progn
(setq grdata (grread 't 9 0)
code (car grdata)
data (cadr grdata)
)
(cond
( (and (= 5 code) (listp data))
t ; t는 함수를 계속 while 한다는 의미
)
( (and (= 3 code) (listp data))
(command "_LINE" '(0 0) data "")
(princ "글릭")
(princ data)
)
( (= 25 code)
(princ "오른쪽 마우스")
(princ data)
)
( (= 2 code)
(cond
( (= 13 data)
(princ "엔터")
(princ data)
)
( (= 32 data)
(princ "스페이스")
(princ data)
)
( (vl-position data '(85 117))
(princ "대소문자 U")
(princ data)
)
( t )
)
)
( t )
)
)
)
)
'Lisp & Tips > Lisp' 카테고리의 다른 글
| 치수관련 변수 목록 (0) | 2015.01.03 |
|---|---|
| 문자 또는 숫자 자동 증가 (0) | 2014.11.22 |
| SSGET 사용법 정리 (0) | 2014.11.07 |
| 리스트에서 순서 뽑기 기초 (0) | 2014.10.27 |
| (mapcar) 와 (lambda) (0) | 2014.10.25 |