Q&A

  • 키보드의 키값을 구분해서 받고 싶습니다.
평안하신지요..



다름이 아니라 텍스트박스에서 값을 숫자만 받고 싶어서 그러는데 도무지 할수가 없군요.



아시는 분들 쫌 알려 주세요..



그니까~~



텍스트 박스에는 숫자만 써지고 다른 문자는 써지지 않는것 처럼 말이죠..



하하



넘 쉬운건가?



저한테는 어렵습니다.



알려주세요~`



프리즈



2  COMMENTS
  • Profile
    이헌재 2000.02.08 08:37
    돌맹이 wrote:

    > 평안하신지요..

    >

    > 다름이 아니라 텍스트박스에서 값을 숫자만 받고 싶어서 그러는데 도무지 할수가 없군요.

    >

    > 아시는 분들 쫌 알려 주세요..

    >

    > 그니까~~

    >

    > 텍스트 박스에는 숫자만 써지고 다른 문자는 써지지 않는것 처럼 말이죠..

    >

    > 하하

    >

    > 넘 쉬운건가?

    >

    > 저한테는 어렵습니다.

    >

    > 알려주세요~`

    >

    > 프리즈

    >



    제가 즐겨쓰는 방법입니다..

    event : onkeypress or onkeydown 에서

    다음과 같은 함수를 이용하면 됨

    procedure Tform1.edit1keypress(Tobject:sender);

    begin

    chkinputkey(key,1);//이건 숫자만 들어가기..

    chkinputkey(key,2);//이건 알파벳만 들어가기..



    end;





    function chkInputKey(key:char; ichkType:integer):char;

    var ikeyInput:integer;

    begin

    ikeyInput:=Ord(key);

    result:=key;

    case ichktype of

    1: case ikeyInput of

    46,48..57,8,13: ; //숫자

    else result:=#0;

    end;

    2:case ikeyInput of

    97..122,8,13,65..90: ; //소문자,대문자

    else result:=#0;

    end;

    end;

    end;

    도움이되길 바랍니다...



  • Profile
    도움받은이 2000.02.08 07:25
    다른 분이 컴포넌트에 사용한 부분이지만 이 부분의 소스가

    하시고자 하는 일에 도움을 줄 수 있을것 같군요...

    //=============== KeyPress ==========================

    procedure TValEdit.KeyPress(var Key: Char);

    var

    posOf : longint;

    pos1, pos2 : word;

    ok : Boolean;

    val : string;

    toinsert : string[1];

    begin

    pos1 := 0;

    pos2 := 0;

    if Scale > 0 then

    ok := Key in ['0'..'9','.','-', #8, #127]

    else

    ok := key in ['0'..'9','-', #8, #127];



    if Not ok Then

    Key := #0

    else if ( MaxLength > 0 ) AND

    ( length(text) - length(SelText) = MaxLength + 3 ) then

    Key := #0

    else

    begin (* both of the following if's need it *)

    posOf := SendMessage( Self.Handle, EM_GETSEL, 0, 0 );

    pos1 := posOf AND $FFFF; // 시작에 관계없이 앞위치

    pos2 := posOf SHR 16; // 시작에 관계없이 뒤위치

    end;



    if (Key = '-') or (Key = '.') then

    begin

    if (Key = '-') and ( pos1 <> 0 ) then (* '-' 부호가 중간에 들어가면 *)

    Key := #0

    else if ( Key = '.' ) then (* '.'이 눌렸을 때 *)

    begin

    if pos('.', Text) > 0 then (* '.'이 이미 있을때 *)

    begin

    if pos1 <> pos2 then (* 반전시켰을 때*)

    begin (* 반전시킨 부분에 '.'이 없을 때*)

    if pos('.', SelText) = 0 then Key := #0;

    end

    else Key := #0; (* 반전시키지 않았을 때*)

    end

    else (* '.'이 없을때 *)

    if pos1 = pos2 then (* 반전시키지 않았을 때 *)

    begin (* '.'뒤의 자리수가 Scale보다 크면*)

    if ( length(text) - pos1 ) > Scale then Key := #0;

    end

    else

    if ( length(text) - pos2 ) > Scale then Key := #0

    end

    end

    else if ok and (Key <> #8) and (Key <> #127) then

    begin

    if pos('-', SelText) = 0 then (* 반전시킨 부분에 '-'가 없고 *)

    if (pos1 = 0) and (Text <> '') then

    if (Text[1] = '-') then (* '-'부호 앞에 숫자를 쓰려고 할 때 *)

    Key := #0;

    if pos('.', Text) > 0 then (* '.'이 이미 있을때 *)

    if pos('.', Text) < pos1 + 1 then (* '.'보다 뒤에서 쓸때 *)

    if pos1 = pos2 then (* 반전시키지 않았을 때 *)

    if ( length(text) - pos('.', Text) ) = Scale then

    (* Scale만큼 찼으면 *)

    Key := #0;

    (*=======================================================*)

    if key <> #0 then

    begin

    val := Text;



    toinsert[0] := #1;

    toinsert[1] := Key;



    if pos1 <> pos2 then (* something was selected *)

    begin

    Delete( val, pos1 + 1, pos2 - pos1 );

    end;

    Insert( toinsert, val, pos1 + 1 );

    end;

    end;



    inherited KeyPress(Key);

    end;





    돌맹이 wrote:

    > 평안하신지요..

    >

    > 다름이 아니라 텍스트박스에서 값을 숫자만 받고 싶어서 그러는데 도무지 할수가 없군요.

    >

    > 아시는 분들 쫌 알려 주세요..

    >

    > 그니까~~

    >

    > 텍스트 박스에는 숫자만 써지고 다른 문자는 써지지 않는것 처럼 말이죠..

    >

    > 하하

    >

    > 넘 쉬운건가?

    >

    > 저한테는 어렵습니다.

    >

    > 알려주세요~`

    >

    > 프리즈

    >