윈도우에서 키보드가 눌려졌을때 먼저 발생하는 메시지는
WM_KEY_DOWN로 빌더의 OnKeyDown이벤트입니다.

이 메시지가 TranslateMessage에 의해 처리되어서 발생하는 메시지가
WM_CHAR 인데.. 이것이 빌더의 OnKeyPress 이벤트죠.

따라서 키보드를 누르게 되면 두개의 이벤트가 차례대로 발생합니다.

차이점은 KeyDown에서의 Key는 버추얼키 코드를 가지고
KeyPress에서 Key값은 아스키 값을 가지고 있기때문에
캡스락이 꺼진 상태에 쉬프트를 누르고 A를 누르게 되면 다음과 같은순서로 이벤트가 발생합니다.

1.쉬프트 누를때 KeyDown
2. A누를때 KeyDown
3. 대문자 'A'대한 KeyPress

그러니까 TEdit콤포넌트는 쉬프트 상태에따라 대소문자가 자동으로 바뀌기때문에
KeyPress이벤트에서 문자를 입력 받는것이고
그것을 제어하기 위해서는 KeyPress이벤트에서 처리해야 하는것이죠.

참고로 KeyDown은 마우스 버튼을 눌렀을때도 발생합니다.
이벤트함수에서 TShiftState Shift를 확인해 보면 마우스 버튼이 눌렸는지 알수 있죠.

[출처] KeyDown과 KeyPress의 차이점|작성자 내꺼야



비주얼 베이직에서 KeyDown과 KeyPress의 차이

    KeyDown(KeyUp)  KeyPress
 누른 값  Shift + a  Shift + a
 인자1  Keycode = 65 Ascii = 97 
 인자2  Shift = 1  
부가 설명 Shift 인자 값
Shift = 1
Ctrl = 2
Alt = 4
CapsLock을 이 켜져있어도 대문자로 인식 안됨.
 Ctrl, Alt 인식 못함
CapsLock이 켜져있거나
쉬프트 + 문자 눌렀을 시
대.소문자 변환하여 인식

'P/L > Visual Basic' 카테고리의 다른 글

Visual Basic] 랜덤함수 Rnd() 와 Randomize  (0) 2011.12.15
Visual Basic] 반투명 처리 (펌)  (0) 2011.12.14
MsgBox  (0) 2011.12.13
[Visual Basic] WindowState 속성  (0) 2011.12.07
[Spread] OperationMode, Single과 Row의 차이점.  (1) 2011.12.07
Posted by 야동우
,