|
김상훈 님이 쓰신 글 :
: 꼴님...꼴님 방법으로 하니깐..문자는 제가 원하는데로 찍힙니다..근데..del키과 backspace키를 사용안하게 할려고 하니깐.안 됩니다.그래서 제가 아래와 같이 코딩을 하엿는데..이렇게 하니깐..되거든요...근데 키다운 이벤트랑 키프레스 이벤트는 이벤트의 차이는있지만..코딩의 방법은 똑같은 결과를 가져올거라고 생각이 되는데..왜 결과가 다른지..리플 부탁 드립니다...
-----------------------------------------------
윈도우에서 키보드가 눌려졌을때 먼저 발생하는 메시지는
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를 확인해 보면 마우스 버튼이 눌렸는지 알수 있죠.
이해가 되셨나요?
그럼 즐건하루 되시길. ^^
|