제목과 같은 기능 구현 요청이 현업에서 있었습니다.
처음에는 key 입력 이벤트에서 + 키 체크하면 쉽게 구현이 가능 할 줄 알았습니다.
//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키를 강제로 발생시킵니다.
Powerbuilder Stored Procedure(SP) Output 파라미터 관련 (0) | 2021.06.14 |
---|---|
Gmail 메일 발송시 스팸메일로 처리되어 발송이 안되는 경우 해결 방법 (0) | 2021.05.27 |
MSSQL 웹(Get/Post)통신 : SQL_APIConsumer 활용 (0) | 2020.08.21 |
MSSQL 웹(Get/Post)통신 : SQL_APIConsumer (2) | 2020.08.20 |
네이버 SmartEditor 기본글꼴 변경하기 (0) | 2020.04.09 |
Blog is powered by kakao / Designed by 미스터짱