grread 는 사용하기 따라서 꽤 유용한 함수이다.

 

이 함수는 현재 마우스의 위치와 클릭을 했는지, 키보드를 입력했다면 어떤 것을 입력했는지를 반환하기 때문에 각 입력에 따른 별도의 기능을 부여할 수 있다는 장점이 있다.

 

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