Q&A

  • [답변] key 처리
key 처리를 하는데.. 폼에 key preview 를 True 로 하고 keydown시에
vk_return일 경우에 버튼을 엔터칠경우에 뭔가를 실행하고 끝나면
또다른 폼이 뜨는 프로그램입니다...

근데 문제점은 엔터를 치고 뭔가를 실행하는동안 계속 엔터를 몇번 더치면
그 key값이 저장되어있다가 다음폼에서 실행이 됩니다.

그렇게 하지않고 폼이 종료될때 그 key 값을 클리어하거나 아니면 실행되는
순간 key가 안들어가게 하는방법이 있나요...

그리고 key값은 어디에 저장이 되는건지...

고수님 많은 조언 부탁드립니다...

3  COMMENTS
  • Profile
    미친코딩 2003.05.27 19:58
    keydown event안에서
    key값을
    key := 0; 해주세요.


  • Profile
    엔터프라이즈 2003.05.27 20:49

    답변고맙습니다.

    근데 key := $00 ;
    을 해주도 안되는군요..ㅠㅠㅠㅠㅠ

    keydown시 이벤트 이렇게 처리했구여..
    case key of
       vk_return : begin
         if ActiveControl.Name = 'Button01' then
         begin
           Exe_Proc() ; // 뭔가를 실행하는 프로시저..
         end ;
         SelectNext(ActiveControl,True,True) ;
        end ;
       end ;

    실행프로시져
    Procedure TFrm_Form1.Exe_Proc() ;
    begin
      If ~~~~~~~~~~~ then
      begin  
         ~~~~~~~~~
         ~~~~~
         ~~~
         Close ;
         If Frm_Form2 = nil then Frm_Form2 := TFrm_Form2.creat(application) ;
         Frm_Form2.show ;
        end else 다시시도 ;
      end ;

    간략적으로 이런프로그램입니다.

    여기서 문제점은
    Form1에서 버튼을 엔터를 쳤을경우 실행프로시져로 넘어가는데
    실행하는동안 계속 엔터를 치면
    Close 되고 다음폼에서 그 엔터값이 계속 실행된다는것입니다.
    다음 폼에서 처음 포커스가 버튼에 가있거든요..
    그래서 바로 그 버튼에 있는 프로시져가 실행됩니다.
      그래서 Form1에서 엔터를 여러번쳐도 Form1이 Close되면 keydown의
      vk_return 이 실행안되게 하는방법을 알고싶습니다..

      그럼 많은 조언 부탁드립니다.
      

        
  • Profile
    미친코딩 2003.05.27 21:27
    흠...KeyDown과 KeyUp Event에서 Key값 초기화는 0입니다.
    KeyPress에서는 Key := #0; 이고요....^^*~

    case key of
       vk_return : begin
         if ActiveControl.Name = 'Button01' then
         begin
           Key := 0;   //<--------------여기다 해주세요.
           Exe_Proc() ; // 뭔가를 실행하는 프로시저..
         end ;
         SelectNext(ActiveControl,True,True) ;
        end ;
    end ;

    내가 제대로 이해했나? 그저그저~! ㅡㅡ#