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
[41325] Re:[질문]Edit에 대한 질문 입니다.
유영인 Cuperido [cuperido] 946 읽음    2005-08-04 19:09
개인적으로는 한글의 특성상 좀 힘들지 않을까 싶습니다.

0x80으로 비교 했다 하더라도, 받힘을 입력할지 안할지는 모르는 일이고,
받힘을 입력했다 하더라도 그것이 다음 모음과 이어지는 자음이 될지도
모르는 일이라, 오히려 이런 기능을 구현하게 된다면, 유저들에게는
불편하게 만드는 일이 아닐까라는 생각도 드네요.. :D

몇번 간단히 테스트 해보다가, 여러 상황에 대처하기가 어려울것 같아서
그냥 간단히 참고만 기록해 드립니다. :)

1. 'ㅁ' 자음만 입력된 경우
> 캐롯에서 이벤트가 발생하지 않음. 캐롯 자체를 파싱 하여야 함.
(KeyDown 이벤트나 Up 이벤트로 걸러내기는 가능합니다)

2. '아' 처럼 입력한 경우
> 이때, 0x80을 비교하여 한글이 완성되었는지 알 수 있으나
'안' 이렇게 유저가 추가로 받힘을 입력할지도 모름.

3. '안' 처럼 입력한 경우
> 조합형 코드로 변환후 받침 입력이 되었는지 알아내는 방법도 있으나
이랬을 경우에, '아니' 이렇게 모음을 입력하여 변경되는 경우도 있음
이랬을 경우 '아니' 에서 '아'는 위 Edit, '니' 는 아래 Edit로 변경해서
보내야함.

등등 이런식으로 써 놓았지만, 유저가 추가적으로 입력을 할지 안할지가
가장 큰 문제로, 대기시간을 두어 자동으로 이동되게 했다 하더라도
'아니' 이런 글자를 쳤을때 유져들이 더 혼동하게 될 것 같습니다.

차라리 MaxLength 를 두어서 일정 글자를 넘지 못하게 하신 후
엔터키 등으로 이동을 되게 하시는 것이 좋을것 같습니다.


cuperido

유랑 님이 쓰신 글 :
: 안녕하세요..
: 이곳에는 자주 와서 도움을 받는데, 글쓰기는 처음이군요..^^;
: 날씨가 또 무더워 지네요.. 건강 조심 하시기를..
:
: 한글과 영문입력의 차이때문에 지금 3일째 고생하고 있는 완전 초짜 입니다.
: 체크리스트박스 <--> 6개 에디터를 두고요,
: 에디터로 입력받아 체크리스트박스로 넘기는 작업입니다.
: 에디터는 각각 20컬럼을 가지고 있습니다.
:
: 여기서 발생하는 문제가 영문을 치다가 20컬럼이 넘어가면 다음 에디터로 잘 넘어가는데요,
: 한글을 치다가 20컬럼이 넘어가면 다음에디터로 안넘어 가게 됩니다.
: 여러 꽁수를 쓰다가 결국 여기에 이렇게 질문을 남겨 봅니다.
: 한가지 더 발생하는 문제가 한글 같은 경우는 다음 에디터로 넘어가면서 누른 키의 값을 잃어 버리는 것 입니다.
: 밑에는 제가 여태 작업해서 실패한 소스를 올립니다.
:
: void __fastcall TfrmMain::Edit_KeyPress(TObject *Sender, char &Key)
: {
: int nMaxLength,ptrControl;
:     nMaxLength = dynamic_cast<TEdit *>(Sender)->Text.Length();
:     ptrControl = dynamic_cast<TEdit *>(Sender)->Tag;
:
:     if ((nMaxLength >= 18)&&(dynamic_cast<TEdit *>(Sender)->Text.c_str()[nMaxLength-1] & 0x80) == 0x80)
: //바로 윗부분이 문제의 부분 입니다~!!
:     {
:             Caption = "18";
:             if(((Key == VK_RETURN)||(nMaxLength >= 18))&&(Key != VK_BACK))      
:
:             { 
:                     SelectNext(ActiveControl,true,true);    
:             }
:            else if((Key == VK_BACK)&&(nMaxLength==0))
:            {
:                   if(ptrControl)
:                   {
:                         SelectNext(ActiveControl, false, true);
:                   }
:            }
:     }
:     else 
:     {
:             Caption = "19";
:             if((Key == VK_RETURN)||(nMaxLength >= 19)&&(Key != VK_BACK)) 
:             {  //Goto Next
:                     SelectNext(ActiveControl,true,true);   
:             }
:            else if((Key == VK_BACK)&&(nMaxLength==0))
:            {
:                   if(ptrControl)
:                   {
:                         SelectNext(ActiveControl, false, true);
:                   }
:            }
:     }
: }
:
: 그럼 잘 부탁드리겠습니다. (__);;

+ -

관련 글 리스트
41310 [질문]Edit에 대한 질문 입니다. 유랑 875 2005/08/04
41325     Re:[질문]Edit에 대한 질문 입니다. 유영인 Cuperido 946 2005/08/04
41330         Re:Re:[질문]그럼 방법을 다시 바꿔봐야 겠네요..ㅠ0ㅠ 유랑 749 2005/08/05
41332             Re:Re:Re:[질문]그럼 방법을 다시 바꿔봐야 겠네요..ㅠ0ㅠ 유영인 Cuperido 776 2005/08/05
41333                 Re:Re:Re:Re:[질문]그럼 방법을 다시 바꿔봐야 겠네요..ㅠ0ㅠ 유랑 745 2005/08/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.