PowerBuilder开发中控制焦点转移几法
一、窗口中命令控件(COMMADN BUTTON)间焦点切换用TAB键或SHIFT TAB组合键实现,选中控件用鼠标点击,用户在输入数据过程中很不方便。用户习惯用光标键移动控件按钮,按回车键选中控件,下面介绍实现这一用户需要的方法:
1.在窗口中定义局部外部函数(LOCAL EXTERNAL FUNCTIONS)keybd_event。
SUBROUTINE keybd_event(INT bvk,INT bscan,INT dwflags,& INT dwextrainfo)LIBRARY“user32.dll”
2.在窗口用户自定义事件key中写如下程序:
GRAPHICOBJECT cb_control//定义环境变量
CHOOSE CASE KEY
CASE KEYRIGHTARROW!//按光标右键右移焦点
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
CASE KEYDOWNARROW!//按光标下移键右移焦点
keybd_event(9,0,0,0)
keybd_event(9,0,20)
CASE KEYLEFTARROW!//按光标左键左移焦点
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,20)
CASE KEYUPARROW!//按光标上移键左移焦点
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
CASE KEYENTER!//按回车键触发焦点处控件
cb_control=GETFOCUS()
IF TYPEOF(cb_control)=COMMANDBUTTON!THEN
TRIGGEREVENT(cb_control,clicked!)
END IF
END CHOOSE
二、PB中数据窗口输入栏目间的切换通过按TAB键或SHIFT TAB组合键实现,用ENTER键代TAB键实现焦点向后转移,很多资料介绍了实现方法,但用户仍然需用SHIFT TAB组合键实现焦点向前转移,仍不方便,下面介绍一种用SHIFT键代替SHIFT TAB组合键,同时用ENTER键代替TAB键,并且在数据窗口末尾按ENTER键系统能自动追加数据行的方法(以下所有定义在数据窗口控件中进行)。
1.定义局部外部函数(LOCAL EXTERNAL FUNCTIONS)keybd_event,方法如下:
SUBROUTINE keybd_event(INT bvk,INT bscan,INT dwflags,& INT dwextrainfo)LIBRARY“user32.dll”
2.在用户定义事件(Use Events)中选择pbm_dwnkey并命名为press_shift,选择pbm_dwnprocessenter并命名为press_enter。
3.定义局部变量(Instance Variables)i,方法如下:
INTEGER i=0
4.在Itemfocuschanged用户事件中定义如下语句:
i=0
5.在用户定义事件press_shift中输入如下程序:
IF KEYDOWN(KEYSHIFT!)AND i=0 THEN
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
i=1
RETURN 1//按shift键向前移焦点
END IFT
6.在用户自定义事件press_enter输入如下程序:
IF THIS.GETCOLUMN()=LONG (THIS.OBJECT.DATAWINDOW.COLUMN.COUNT)THEN
IF THIS.GETROW()=THIS.ROWCOUNT()THEN
THIS。INSERTROW(0)//数据窗口末按ENTER键追加数据行
THIS.SCROLLTOROW(THIS.GETROW()+1)
THIS.SETCOLUMN(1)
RETURN 1
END IF
END IF
SEND (HANDLE(THIS),256,9,LONG(0,0))//按ENTER键向后移焦点
RETURN 1