|
답변을 해주셔서 감사합니다.
그러면 Keypress 이벤트에서 파라미터로 넘어오는 char &Key 값은 무엇을 의미하는지요.
한글 입력 상태에서 메모 컴포넌트에서 "가"를 입력해서 Keypress 이벤트를 발생시키고
다시 "나"를 입력해서 Keypress 이벤트를 발생시키면
두글다 영문 'K' 한글 'ㅏ'가 마지막으로 입력되었는데 그러면 '가' 와 '나'를 구분할수 있는
방법은 없는지요.
제가 입력해서 확인해보니
한글모드에서 '가' 입력시 Key 값은 0xB0 (176)
한글모드에서 '나' 입력시 Key 값은 0xB3 (179)
영문모드에서 K 입력시 Key 값은 0x4B (75)
이렇게 Key값이 읽여집니다.
하지만 '가'라는 한글코드는 임프님이 쓰신것처럼 2Byte로 0xB0 0xA1
'나' 는 '0xB3 0xAA 입니다.
Keypress에서는 첫번째 바이트 값만 읽어오는데 2번째 바이트 값을 읽을 방법은 없는건지요.
개발환경
Windows XP
C++Builder 5.0 Enterprise
Memo 컴포넌트 설정값
Font Charset HANGEUL_CHARSET
imeMode imDontCare
imeName 한국어 입력 시스템(IME 2000)
방법을 알고 있으시면 꼭 답변 부탁드립니다.
감사합니다.
유영인.Chris 님이 쓰신 글 :
: 한글 코드가 꼭 따로 아스키 코드로 있는것은 아닙니다. 예를 들어, '하' 의 경우, KeyPress 가 2번 작동되겠지만, '늘' 의 경우에는 3번 작동됩니다.
:
: 따라서, 석구님께서 말씀하신대로 한글 코드가 2Byte 인것과는 KeyPress와는 상관이 없습니다. KeyPress에서는 눌려진 키 값을 반환해 줍니다. 이것은 편하게 그냥 키보드의 위치 값과 똑같다고 생각하시면 됩니다.
:
: 따라서, 'a' 와 'ㅁ' 의 경우 똑같은 아스키 값을 넘겨주게 됩니다. 다른 처리를 원하신다면, 한글 상태인지 영문 상태인지 알아본 다음, 처리를 따로 해주셔야 합니다
:
: 한글 영문 상태를 강제로 치환하는 방법은, 아래와 같이 처리하시면 됩니다.
:
:
: HIMC hiMode = ImmGetContext(Application->Handle);
:
: // 영문 자판
: ImmSetConversionStatus(hiMode, IME_CMODE_ALPHANUMERIC, IME_CMODE_ALPHANUMERIC);
: // 한글 자판
: ImmSetConversionStatus(hiMode, IME_CMODE_HANGEUL, IME_CMODE_HANGEUL);
:
:
:
:
:
: 홍석구 님이 쓰신 글 :
: : memo 컴포넌트에서 keypress 이벤트 등록했습니다.
: : char로 넘어오는 키값을 한글에 대해서 읽을수 있나요.
: : Q&A 찾아보고 Tip'N Tricks을 찾아봐도 keypress 이벤트에서
: : 한글코드를 읽어오는 것은 못찾겠습니다.
: : Tip'N Tricks에 임프님이 쓴글도 char [] 배열에 한글코드가 들어가 있는
: : 데서 시작해서 sendmessage 하는 것인데 한글코드 자체를 읽어오지 못하니
: :
: : 아시는 분있으시면 꼭 답변 부탁합니다.
: : c++builder 5.0
: : windows xp 에서 개발하고 있습니다.
: :
: : void __fastcall TForm1::memoKeyKeyPress(TObject *Sender, char &Key)
: : {
: : // Key 영문에 대해서는 작동하지만 한글코드는 알아내지 못하고 있습니다.
: : // 한글코드는 2byte인데 파라미터는 char로 넘어옵니다.
: : // 해결방법을 아시는 분이 계십니까
: : }
: :
: : 감사합니다.
|