티스토리 뷰

반응형

 

 PowerBuilder 에서 플러스키 입력시 곱하기 1000기능 구현하기

 제목과 같은 기능 구현 요청이 현업에서 있었습니다.

처음에는 key 입력 이벤트에서 + 키 체크하면 쉽게 구현이 가능 할 줄 알았습니다.

 

 

 1차 구현시 문제점 발견

 

//ue_key event에 아래 소스 선언

if key = KeyAdd! then

	String 	ls_ColumnName, ls_ColumnType
	Long 	 	li_Row
	Decimal 	lc_Amt
	ls_ColumnName 	= This.GetColumnName()
	ls_ColumnType  = This.uf_GetColType(ls_ColumnName)
	
	IF ls_ColumnType = 'number' Then
		This.AcceptText()
	   li_Row = This.GetRow()
		lc_Amt = This.GetitemNumber( li_Row, ls_ColumnName)
		lc_Amt = lc_Amt*1000
		
		This.SetItem(li_Row, ls_ColumnName, lc_Amt)
		
		  
   End IF

End IF


// uf_getcoltype(string as_column) returns string  함수 소스
String ls_Type

ls_Type = This.Describe(as_Column + ".ColType")

Choose Case ls_Type
	Case 'date', 'datetime', 'time', 'timestamp'
		Return ls_Type
		
	Case 'int', 'long', 'number', 'real', 'ulong'
		Return 'number'
		
	Case else
		
		IF MID(ls_Type, 1, 4) = 'char' Then
			Return 'string'
		End IF

		IF MID(ls_Type, 1, 7) = 'decimal'  Then
			Return 'number'
		End IF
End Choose

Return ''

참고) uf_getcoltype 함수는 해당 컬럼이 숫자인 경우 number를 리턴합니다.

 

아래는 위소스로 1 입력 후 + 키 입력 한 경우입니다.

1 X 1000 후 + 키가 입력이 됩니다. ㅡㅡ;

 

최종 완성소스

// Global External Functions 에 아래 소스 선언 
SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll" 

// ue_key 이벤트에 아래 소스추가 

if key = KeyAdd! then

	String 	ls_ColumnName, ls_ColumnType
	Long 	 	li_Row
	Decimal 	lc_Amt
	ls_ColumnName 	= This.GetColumnName()
	ls_ColumnType  = This.uf_GetColType(ls_ColumnName)
	
	IF ls_ColumnType = 'number' Then
		This.AcceptText()
	   li_Row = This.GetRow()
		lc_Amt = This.GetitemNumber( li_Row, ls_ColumnName)
		lc_Amt = lc_Amt*1000
		
		This.SetItem(li_Row, ls_ColumnName, lc_Amt)
		
      keybd_event(8, 1, 0, 0)    // 백스페이스키 강제 입력으로 제일 앞에 있는 + 지움
      keybd_event(35, 1, 0, 0)   // End 강제 입력으로 커서를 제일 끝으로 이동	
		  
   End IF

End IF

1차 소스에서 + 키입력 시 곱하기 1000 후 백스페이스 키와 End키를 강제로 발생시킵니다.

 

 

반응형
댓글