C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23051] Re:Re:Re:Re:keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요
홍석구 [seoggoo] 1569 읽음    2002-12-06 09:17
답변을 해주셔서 고맙습니다.
제가 작성하려고 하는 프로그램은
PC 와 PC를 시리얼케이블로 연결하고 프로그램을 실행시킨후에
한쪽 PC에서 키보드를 입력하면 상태편 PC로 키보드 값을 시리얼통신을
통해서 보내주고 받은쪽에서 수신받은 키값을 보여주려고 합니다.

    PC1 <--->  PC2
KEY입력  --> 화면에 같은 글자 출력
"가"입력 --> "가"출력

이렇게 처리하려고 합니다. 영문의 경우는 KEY값이 잘전송되나
한글은 전에 적은것처럼 KEY값을 잘찾지 못하고 있습니다.
한쪽 PC는 C++BUILDER로 프로그램을 작성하고 상대편PC는 자바로 프로그램을
작성하고 있습니다.

감사합니다.



유영인.Chris 님이 쓰신 글 :
: 안녕하세요.
:
: 제가 질문을 신중하게 읽지 못해서 조금 실수를 하였네요.
: 일단, 키 이벤트가 3개가 있는데, 각각 한글을 처리할때 조금씩 틀립니다.
:
: 1. OnKeyDown
: 한글을 입력하면 VK_PROCESSKEY 라는 Key 값만 발생함
:
: 2. OnKeyPress
: 한글 한자를 모두 입력시에만 발생. 흔히 입력을 하는 도중의 상황을 Caret 이라고 표현을 하는데, 이 상태에서는 표현되지 않습니다.
:
: 3. OnKeyUp
: 한글 코드가 영문과 동일하게 키 값으로 바뀌어서 출력.
:
:
: 가장 간단한 방법은, KeyUp 등에서 한글모드일때, 전의 문자를 비교하는 방법입니다.
:
: void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
: {
:
:  unsigned char     chChar;
:
:
:  if(Memo1->SelStart <= 0) return;
:  chChar = Memo1->Lines->Text[Memo1->SelStart];
:
:  if(chChar > 128) Label1->Caption = Memo1->Lines->Text.SubString(Memo1->SelStart - 1, 2);
:              else Label1->Caption = (char)chChar;
:
: }
:
:
: 물론, 다른 방식으로 처리를 하는 방법도 있습니다. 후킹이나 메세지 처리를 하는 방법입니다.
: 어떤 작업을 하시려는지 알려주시면, 그에 가장 맞는 방법을 추천해 드리기가 더욱 쉬울것 같습니다.
:
:
:
: 홍석구 님이 쓰신 글 :
: : 답변을 해주셔서 감사합니다.
: : 그러면 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로 넘어옵니다.
: : : :     // 해결방법을 아시는 분이 계십니까
: : : : }
: : : :
: : : : 감사합니다.

+ -

관련 글 리스트
23004 keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요 홍석구 1243 2002/12/04
23009     Re:keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요 유영인.Chris 1263 2002/12/04
23019         Re:Re:keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요 홍석구 1347 2002/12/04
23043             Re:Re:Re:keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요 유영인.Chris 3964 2002/12/05
23051                 Re:Re:Re:Re:keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요 홍석구 1569 2002/12/06
23061                     Re:Re:Re:Re:Re:keypress 이벤트에서 한글키값을 읽을수 있는방법 알려주세요 유영인.Chris 2401 2002/12/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.