Q&A

  • 일본 OS에서 KeyDown event 문제
안녕하세요~~~

일본 관련 작업중 이상한 부분이 있어서 글 올립니다.

에디트 박스에 숫자만 입력받아야 해서 onKeyPress 이벤트에
숫자만 입력받게 해서 처리했는데,

일본OS에서 확인해보면 히라가나가 입력이되고,
정확히 표현하자면
히라가나를 쓰면 화면상에 보이는 상태(글씨 밑에 밑줄이 있는...)이고
엔터를 눌러야 실제 히라가나가 있는 부분에 에러메시지를 뿌려줍니다.

제 생각이 맞는지는 모르겠지만,
엔터키를 눌러야 keypress라든지 keydown 이벤트가 발생해서
입력받은 값을 체크하는거 같은데...

다른 분들의 생각은 어떠신지~~~
조언을 부탁합니다....

그럼..이만...

6  COMMENTS
  • Profile
    남충희 2004.07.04 05:37
    IME가 작동중일때는 동작에 문제가 있을 수 있습니다.

    IME의 동작은 서브클래싱(수퍼클래싱?)으로 동작되기 때문에 프로그램에서 인식하기전에 메시지가 필터링이 될 수 있습니다.

    따라서 KeyPress 보단 KeyDown이나 KeyUp 이벤트를 사용하셔야 될것 같습니다.

    테스트는 해보지 못했습니다.



  • Profile
    [勳]후니 2004.07.01 20:54
    ime 입력 방식 때문에 발생하는 문제 같네요...

    ime에서 한영 전환 안되게 하는 거와 같이 한일 전환 안되게

    코딩을 해주면 해결 될꺼 같은데...

    일본어 입력 시스템은 한글이랑 틀려서 밑줄있는 상태는 보여

    주기만 하는 상태라서 키 입력으로 간주 안하는거 같습니다.

    개인적인 의견 였습니다...


  • Profile
    박세진 2004.07.01 01:06
    윈도우 이벤트가 잘 작동안 한다면 직접

    키입력을 읽기 위해 GetAsyncKeyState 같은 API를 써보시면 어떨까요?

    키입력을 체크하는 부분은...

    타이머나 쓰레드가 필요하겠네요.

  • Profile
    Jung 2004.07.02 01:27

    먼저 답변 고맙습니다.
    답변 주신분 님께서 말씀하신 GetAsyncKeyState는 약간의 문제가 있는것 같습니다.
    타이머를 설정하여 일정시간마다 GetAsyncKeyState을 호출하여 확인한다고 하시는데...타이머에 설정된 시간안에 2개 이상의 키입력이 있을 경우 앞의 것은 무시가 될 수도 있는 듯....한데요...

    다른 방법이 없을까요?

  • Profile
    KDDG_Gnoses 2004.07.02 18:59
    음 GetAsyncKeyState 랑 GetKeyState 랑의 차이점이 그걸로 알고 있습니다.

    전자는 이벤트 큐에 있는 것들을 다 처리해서 순서대로 받기 때문에

    입력한 키가 누락되지 않는걸로 알고 있습니다.

    직접 해보자면...

    폼을 하나 만들고 1초 짜리 타이머를 하나, 에디트박스를 하나 올린후 아래와

    같이 코딩하면...

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i : Integer;
    begin
      for i := 112 to 123 do
        if GetAsyncKeyState(i) <> 0 then
          Edit1.Text := Edit1.Text + 'F' + IntToStr(i - 111) + ',';
        
    end;

    펑션 키를 다다다다다~ 마구 눌러도 입력한 순서대로 다 출력이 되는걸로

    결과가 나오네요~

    이걸로 만족할만한 결과를 얻으실수 있지 않을까... 라고 기대해 봅니다.

    수고하세요.
  • Profile
    Jung 2004.07.03 03:59
    답변주신분들 모두 고맙습니다.
    일문OS에서는 아직 확인못해봤지만...
    될거같은 기분이 듭니다.

    일문 OS에서는 다음주에나 확인이 가능할 거 같습니다.

    즐거운 주말보세요...

    • [ROOKIE]
      2004.07.01 08:19
      ..
    • 박태선
      2004.07.01 20:08
      안내해 주셔서 감사합니다... 님께서 말씀하신대로 가 보았습니다. 그런데... 역시 기본 프린터 설정 ...
    • major
      2004.07.02 17:32
      안녕하세요... 제가 생각하기에는 기본 프린터 변경시 기본 프린터를 변경하고 싶으신거 아닌지요? ...
    • 윤수아
    • 2004.07.01 01:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Jung
    • 2004.07.01 01:01
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 남충희
      2004.07.04 05:37
      IME가 작동중일때는 동작에 문제가 있을 수 있습니다. IME의 동작은 서브클래싱(수퍼클래싱?)으로 동작...
    • [勳]후니
      2004.07.01 20:54
      ime 입력 방식 때문에 발생하는 문제 같네요... ime에서 한영 전환 안되게 하는 거와 같이 한일 전환 안...
    • 박세진
      2004.07.01 01:06
      윈도우 이벤트가 잘 작동안 한다면 직접 키입력을 읽기 위해 GetAsyncKeyState 같은 API를 써보시면 어...
    • Jung
      2004.07.02 01:27
      먼저 답변 고맙습니다. 답변 주신분 님께서 말씀하신 GetAsyncKeyState는 약간의 문제가 있는것 같습니...
    • KDDG_Gnoses
      2004.07.02 18:59
      음 GetAsyncKeyState 랑 GetKeyState 랑의 차이점이 그걸로 알고 있습니다. 전자는 이벤트 큐에 있는 것...
    • Jung
      2004.07.03 03:59
      답변주신분들 모두 고맙습니다. 일문OS에서는 아직 확인못해봤지만... 될거같은 기분이 듭니다. 일문 ...
    • kc
      2004.07.01 21:51
      esri.com에 들어가면 무지하게 맣이 있습니다...물론 mapObjects를 가지고 하는 거죠..또는 선도소프트...
    • 김요한
      2004.07.01 02:49
      아주 잘 됩니다. 예전에 거림시스템이라는 회사가 국내에서 GIS를 주도 했었지요. 개발툴을 Delphi를 ...
    • 오동섭
      2004.07.01 01:15
      전 고수는 아닌데요.. 일반 GIS 업체에서 GIS 엔진이라는 Application이 있습니다.. 주로 벡터 맵을 C/S...
    • 공성환
      2004.07.01 00:43
      MapObjects라는 ocx 가지고 예전에 잠깐했던기역이있네요... 행자부에서 추진했던 토지관리정보체계인가??...
    • 빠블로
    • 2004.06.30 23:01
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 허상무
    • 2004.06.30 22:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박세진
      2004.07.01 01:28
      희미한 기억인데, 아마도 웹페이지가 휠마우스 이벤트를 먼저 받기 때문인듯 하네요. activeX가 올...
    • 박세진
      2004.07.01 00:51
      클래스나 레코드로 배열을 만드시면 될텐데...
    • 박세진
      2004.07.01 01:08
      usb 전문 사이트가 있습니다. http://www.usb.org/phpbb/search.php?mode=results 하시는거랑은 상관...
    • 고은미
    • 2004.06.30 17:53
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 델파이Go!
      2004.06.30 18:18
      showMessage 이용해 보시지요.. showMessage('입력오류입니다.'); 간단하게.. case NumIn of //NumIn...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.06.30 18:01
      숫자를 입력하곤 곳에 keyPress 이벤트에서 코딩을 하시면 됩니다. key의 아스키 코드값이 0~9,
    • 강민주
      2004.06.30 18:29
      RichEdit에 EN_LINK메세지가 발생할때.. 처리해줌 된다고 하네요 아래 사이트에 강좌가 있으니 참고하세...
    • 오동섭
    • 2004.06.30 02:51
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박세진
      2004.07.01 01:13
      C의 난해한 코드 작성 규칙을 오랜만에 보니, 부담스럽네요. 왜 저렇게 비비 꼬아놓는건지... 마...
    • Doli
      2004.06.30 06:49
      for i:=sgFlist.RowCount-1 downto 0 do      for j:=0 to i do    ...
    • 이중철
      2004.06.30 07:53
      for i:=(sgFlist.RowCount-1) downto 0 do begin   ....   inc(j); end; 이렇...
    • 델파이Go!
      2004.06.30 18:28
      j:=0; //이거 빠졌네요. ㅋㅋㅋ for i:=(sgFlist.RowCount-1) downto 0 do begin   .... &nb...
    • 박세진
      2004.07.01 01:17
      네 생각하신대로 하심 됩니다. 어렵게 만들거 뭐 있나요 ^^; 혹 타이머 주기가 짧아져, 시스템 부...
    • 너구리
      2004.06.30 02:33
      서버가 윈도우 라면... 윈도우의 기능을 살려보시지요..(윈 2000 서버) 시작-프로그램-보조프로그램-...
    • 박태선
    • 2004.06.30 02:06
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 유정헌
    • 2004.06.29 23:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Apine
      2004.06.30 22:12
      메시지만으로는 어떤것이 잘못 되었는지 확실히 알수가 없네요.. 단지 추축한건데..  어떤 값...
    • 어이구
      2004.06.30 00:36
      mStream.ReadBuffer(buf,mStream.Size); 로 하시면 안될까염?
    • 박진규
    • 2004.06.29 21:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2004.06.30 02:49
      애니메이션이네요.. 타이머를 올려놓고 시간마다 화면을 다시 그려주시고.. 자동차 이미지의 좌표와 ...