Q&A

  • 키보드에 있는 두 delete 버튼의 차이??
일반적인 키보드를 보면 엔터키 오른쪽 옆에 'Delete'키가 있고 키패트에 'Del'키가 있습니다. 둘다 delete기능을 하는 키인데요.

문제는,

if key = char(VK_DELETE) then
   reset;

이란 코드에서 나타납니다.


위와 같이 하면 키패드의 delete로는 원하던 동작(edit.text를 지운다)이 됩니다. 하지만 엔터키 옆의 delete키로는 위 동작을 하지 않습니다.


왜 이런 차이가 생기는 걸까요?
엔터키 옆의 delete도 똑같은 동작을 하게 하려면 어떻게 해줘야할까요?


답변 부탁드려요. :)
5  COMMENTS
  • Profile
    KDDG_Check 2003.07.26 03:56
    안녕하세요. 여유로움입니다.
    이벤트 선택을 잘못 하셨네요.
    KeyPress에서 하지 마시고
    KeyDown이벤트에서 하세요

    TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;  Shift: ShiftState);
    begin
      if Key = VK_DELETE then
      begin
        //처리
      end;
    end;

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    이유는 keypress는 인수에서 보다 시피 값이 문자인 Char형으로 넘어 옵니다.
    따라서 문자로 나타 낼수 없는 것은 받을 수가 없지요.

    KeyDown이나 KeyUp 이벤트는 기능키들 까지도 받을 수 있답니다.

    그럼 도움이 되셨길 바랍니다.

  • Profile
    KDDG_RNStone 2003.07.26 03:00
    그건 숫자 키 패드로 사용되고 있기 때문이 아닐까요?

    Num Lock에 불이 들어오면 숫자기능이니 '.'로 인식하겠군요.

    Lum Lock을 꺼보고 함 해 보시죠.



  • Profile
    기지훈 2003.07.26 03:30
    질문을 수정할게요. ^^

    ===========================
    // keypress 이벤트입니다(본래의 질문을 하게한 이벤트입니다.)
    procedure TfrmCaculator.btnKeyPress(Sender: TObject; var Key: Char);

    case key of
       '.' : btnclick(btnDecimalPoint); // 소수점키 입력
       char(VK_DELETE) : btnclick(btnReset);
    (생략)
    ============================
    확인해보니 위와 같이 소수점과 delete를 둘다 적어주었을 때 다음과 같은 에러가 납니다.
    [Error] uCalulator.pas(240): Duplicate case label

    소수점키에 대한 줄을 지우고    
    char(VK_DELETE) : btnclick(btnReset);

    이 줄만 남겨놓으면,

    - Enter 키 옆의 delete키는 역시 안먹고,
    - 키보드의 NumberLock ON이 되있을 때 키패드의 delete키가 먹습니다.
      즉, 원했던 삭제 동작을 한다는 거지요.
    - 그.런.데. NumberLock이 OFF일 때는 키패드의 delete키가 안먹네요.


    아아... 이거 왜그럴까요?

    조그마한 도움이라도 부탁드립니다. :)



  • Profile
    ^ㅡ^ 2003.07.26 04:29
    답변이 될지 모르겠군요
    KEYDOWN이벤트에서 해 보세요..

    case key of
    VK_DELETE, VK_DECIMAL : btnclick(btnReset);
    END;



    VK_DECIMAL : NUM에 있는 DEL키값이네요
    VK_DELETE   : ENTER옆에 있는 DEL키값이고

    도움이 될련지 잘 모르겠습니다.
    그럼 항상 즐퍼하세요



  • Profile
    돌멩이 2003.07.26 04:29
    onKeypress 이벤트에서
    VK_DELETE 는 반응하지 않습니다.
    VK_TAB 등 몇개가 있습니다.
    이런 키는 ONKEYDOWN 이나 ONKEYUP 이벤트에서
    체크하여야 합니다.

    도움이 되었으면 합니다.