[ 파워빌더.공통함수 - key pad ]

 

 

☞   

 


(파빌 9.0 기준)

visible user object로 숫자판을 하나 만든다.

picture button을 이용하여 다음과 같이 만들었다.

 

해당 object에 instance 변수 선언:

GraphicObject which_control

 

Local External Functions 나 Global Exterbal Functions 에 다음을 선언한다.

SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"

 

user event 를 하나 만든다.

/****************************************************************

Event 명 : ue_clicked()

argument : string arg_tag

*****************************************************************/

if isvalid(which_control) then 
 CHOOSE CASE typeof(which_control)
  CASE  DataWindow!
   DataWindow    dw_which
   dw_which = which_control
   dw_which.setfocus()   
  CASE CommandButton! 
   CommandButton cb_which
     cb_which = which_control
     cb_which.setfocus() 
  CASE SingleLineEdit!
   SingleLineEdit sle_which
     sle_which = which_control
    sle_which.setfocus()
  CASE Editmask!
   EditMask    ed_which
   ed_which = which_control
   ed_which.setfocus()
  CASE ELSE
   //messagebox('' , 'else')
 END CHOOSE
else
   //messagebox('' , 'err' )
end if
choose case arg_tag
 case '1'
  keybd_event(49 , 0, 0, 0)
 case '2'
  keybd_event(50 , 0, 0, 0)
 case '3'
  keybd_event(51 , 0, 0, 0)
 case '4'
  keybd_event(52 , 0, 0, 0)
 case '5'
  keybd_event(53 , 0, 0, 0)
 case '6'
  keybd_event(54 , 0, 0, 0)
 case '7'
  keybd_event(55 , 0, 0, 0)
 case '8'
  keybd_event(56 , 0, 0, 0)
 case '9'
  keybd_event(57 , 0, 0, 0)
 case '0'
  keybd_event(48 , 0, 0, 0)
 case 'B'//back space
  keybd_event(8 , 0, 0, 0)
 case 'P' //점 
  keybd_event(110 , 0, 0, 0)
 case '+'
  keybd_event(107 , 0, 0, 0)
 case '-'
  keybd_event(109 , 0, 0, 0)
 case 'U'//위로
  keybd_event(38 , 0, 0, 0)
 case 'D'//아래로
  keybd_event(40 , 0, 0, 0)
 case 'L'//왼쪽
  keybd_event(37 , 0, 0, 0)
 case 'R'//오른쪽
  keybd_event(39 , 0, 0, 0)
 case 'DEL'
  keybd_event(46 , 0, 0, 0)
 case 'TAB'
  keybd_event(9 , 0, 0, 0)
end choose

/*****************************************************************/

각 버튼 클릭이벤트에는 버튼에 맞는 아규먼트를 넣어서 위의 이벤트를 실행한다.

예) 숫자1 버튼의 clicked 이벤트 :

     parent.event ue_clicked('1')

 

그리고, 이렇게 만든 오브젝트를 윈도우에서 붙여서 사용한다.(uo_keypad 로 가정)

만일, editmask가 있다면, 해당 editmask 의 getfocus() 이벤트에 다음과 같이 기술한다.

uo_keypad .which_control = getfocus() //해당 오브젝트의 instance 변수를 정의내린다

http://cafe.naver.com/pentaeduclub.cafe

Posted by 농부지기
,