|
개인적으로는 한글의 특성상 좀 힘들지 않을까 싶습니다.
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);
: }
: }
: }
: }
:
: 그럼 잘 부탁드리겠습니다. (__);;
|