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
[28354] Re:[Q]OnKeyPress 에서 숫자만 입력 받는데..
김용수 [heredity] 1583 읽음    2003-12-29 13:49
비교식이 잘못됐군요. 님의 작성하신 부분
  if ((Key < '0' || Key > '9') && Key != 22 && Key != 3)
     Key = 0;
을 풀어서 적용해 보면
  if( Key < '0' || Key > '9' ) {     // ① Key가 '0' ~ '9'가 아니고
    if( Key != 22 ) {                // ② Key가 22 즉, CTRL-V가 아니고
      if( Key != 3 ) {               // ③ Key가 3 즉, CTRL-C가 아니면
        Key = 0;                     // ④ Key값을 0으로 설정함.
      }
    }
  }

가 되므로 CTRL-C, CTRL-V가 입력되는 것입니다.

글구 여러개 콘트롤에 같은 기능을 적용하고 싶으시면 Active Control에서 키 입력을 받도록
KeyPreview를 true로 설정한 후 Form의 OnKeyPress Event에서 처리해 주시면 됩니다.

아래 예는 Edit1, Edit2, ..., Edit7이 있을때
Edit1, Edit2, Edit5에서만 0~9 입력을 하도록 처리한 예 입니다.

즐거운 하루 되시길...

  //---------------------------------------------------------------------------

  #include <vcl.h>
  #pragma hdrstop

  #include "Unit1.h"
  //---------------------------------------------------------------------------
  #pragma package(smart_init)
  #pragma resource "*.dfm"
  TForm1 *Form1;
  //---------------------------------------------------------------------------
  __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
  {
    KeyPreview = true;                     // Active Control에서 키 입력을 받도록 설정함.
  }
  //---------------------------------------------------------------------------
  void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
  {
    if( Edit1->Focused()  |  Edit2->Focused()  |  Edit5->Focused() ) {
      if( (Key >= '0')  &  (Key <= '9') ) {
        int nKey = Key;
        Caption = (PCHAR) &nKey;
      }
      else if( Key == '\b' ) {
        Caption = "BS";
      }
      else {
        if( Key == 'C' - 'A' + 1 ) {         // 이 부분은
          Caption = "CTRL-C";                // 필요 없는 부분이며,
        }                                    // CTRL-C, CTRL-V가
        else if( Key == 'V' - 'A' + 1 ) {    // 올바르게 점검되는지
          Caption = "CTRL-V";                // 확인하기위해 넣은
        }                                    // 코드입니다.
        Key = 0;
      }

      // 아래 주석 처리된 코드는 님의 Style과 유사하게 만든 비교문입니다.
      // if( (Key != '\b')  &&  (Key < '0' || Key > '9') ) {
      //   Key = 0;
      // }
      // else {
      //   int nKey = Key;
      //   Caption = (PCHAR) &nKey;
      // }
    }
  }
  //---------------------------------------------------------------------------

뽀뽀중 님이 쓰신 글 :
: 숫자만 입력 받게 하려고 OnKeyPress이벤트에
:
: if((Key < '0' || Key > '9') && Key != 22 && Key != 3)
:     Key = 0;
:
: 위와 같이 입력 했는데... Ctrl-V(붙여넣기)가 됩니다.
: 무었이 문제 인지 모르겟습니다.(XP)
:
: 또 Edit콘트롤이 여러개 인데, 매 컨트롤 마다 OnKeyPress 이벤트에 위와 같은 코드를 입력하지 않고
: 함수로 만들어 사용하고 싶은데,,, 어떻게 해야 하나요?
:
: 좋은 하루 되시기 바랍니다.

+ -

관련 글 리스트
28349 [Q]OnKeyPress 에서 숫자만 입력 받는데.. 뽀뽀중 1028 2003/12/29
34194     Re:[Q]OnKeyPress 에서 숫자만 입력 받는데.. 3E™ 1003 2003/12/29
28354     Re:[Q]OnKeyPress 에서 숫자만 입력 받는데.. 김용수 1583 2003/12/29
34193         Re:Re:[Q]OnKeyPress 에서 숫자만 입력 받는데.. 뽀뽀중 1012 2003/12/29
28351     Re:[Q]OnKeyPress 에서 숫자만 입력 받는데.. 김윤동.제라툴 1080 2003/12/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.