控制
pb鼠标的移动
傅胜
powerbuilder为程序员提供了改变鼠标形状的方法,却没有提供控制鼠标移动位置的方法。其实在windows 95系统中,已经为程序员提供了控制鼠标位置的方法,利用user32.dll动态链接库中的setcursorpos()函数就可以灵活控制鼠标的位置。
要在powerbuilder中调用外部函数,必须先声明它。有两种类型的外部函数:全局外部函数和局部外部函数。全局外部函数可以在应用程序的任何地方声明使用,它们在应用程序中与其他全局变量一起保存。局部外部函数可以为窗口、菜单、用户对象定义,它们是对象定义的一部分。
定义外部函数的语法如下所示:
{access} function returndatatype name({ref}{datatype]arg],…
datatypen argn}] library libname
参数 描述
access (只有在定义局部外部函数时使用)
可定义为public, protected 或者
private。缺省情况为public。
returndatatype 函数的返回类型。
name 函数名。
datatype1 到 参数类型。
datatypen 如果是传值,可直接将参数写上。
如果是传参数,要在参数类型前加
上一个关键字ref。
arg1 到 参数名。
argn
libname 动态链接库名。
在powerbuilder 的主菜单上选取“declare”的菜单项,然后选择子菜单项“global external function”,在定义全局外部函数对话框中,输入:
function long setcursorpos(long x,long y) library 〃user32.dll〃
注意:对于关键字“setcursorpos”中的大小写字母必须严格区分。这样,程序员就可以在应用程序的任何位置使用该函数了。
当然,我们还可做更复杂的控制。例如要使用户在单行编辑器中输入完后,鼠标定位到“ok”按钮上,则在单行编辑器的losefocus事件中输入:
long x1,y1
x1=(w_genapp_about.x+cb_ok.x+cb_ok.width/2)
x1=unitstopixels(x1, xunitstopixels!) //获取“ok”按钮的x坐标;
y1=(w_genapp_about.y+cb_ok.y+cb_ok.height/2+100)
y1=unitstopixels(y1, yunitstopixels!) //获取“ok”按钮的y坐标;
setcursorpos(x1,y1)
如果要使鼠标从坐标(100,200)移到坐标(500,200),并产生动画效果,则编程如下:
long i,j
for i=100 to 500
setcursorpos(i,200)
for j=1 to 999 //起延时作用,可根据实际情况调整;
next
next
灵活地控制鼠标位置,能使程序更加有趣,对用户也更友好。
傅胜
powerbuilder为程序员提供了改变鼠标形状的方法,却没有提供控制鼠标移动位置的方法。其实在windows 95系统中,已经为程序员提供了控制鼠标位置的方法,利用user32.dll动态链接库中的setcursorpos()函数就可以灵活控制鼠标的位置。
要在powerbuilder中调用外部函数,必须先声明它。有两种类型的外部函数:全局外部函数和局部外部函数。全局外部函数可以在应用程序的任何地方声明使用,它们在应用程序中与其他全局变量一起保存。局部外部函数可以为窗口、菜单、用户对象定义,它们是对象定义的一部分。
定义外部函数的语法如下所示:
{access} function returndatatype name({ref}{datatype]arg],…
datatypen argn}] library libname
参数 描述
access (只有在定义局部外部函数时使用)
可定义为public, protected 或者
private。缺省情况为public。
returndatatype 函数的返回类型。
name 函数名。
datatype1 到 参数类型。
datatypen 如果是传值,可直接将参数写上。
如果是传参数,要在参数类型前加
上一个关键字ref。
arg1 到 参数名。
argn
libname 动态链接库名。
在powerbuilder 的主菜单上选取“declare”的菜单项,然后选择子菜单项“global external function”,在定义全局外部函数对话框中,输入:
function long setcursorpos(long x,long y) library 〃user32.dll〃
注意:对于关键字“setcursorpos”中的大小写字母必须严格区分。这样,程序员就可以在应用程序的任何位置使用该函数了。
当然,我们还可做更复杂的控制。例如要使用户在单行编辑器中输入完后,鼠标定位到“ok”按钮上,则在单行编辑器的losefocus事件中输入:
long x1,y1
x1=(w_genapp_about.x+cb_ok.x+cb_ok.width/2)
x1=unitstopixels(x1, xunitstopixels!) //获取“ok”按钮的x坐标;
y1=(w_genapp_about.y+cb_ok.y+cb_ok.height/2+100)
y1=unitstopixels(y1, yunitstopixels!) //获取“ok”按钮的y坐标;
setcursorpos(x1,y1)
如果要使鼠标从坐标(100,200)移到坐标(500,200),并产生动画效果,则编程如下:
long i,j
for i=100 to 500
setcursorpos(i,200)
for j=1 to 999 //起延时作用,可根据实际情况调整;
next
next
灵活地控制鼠标位置,能使程序更加有趣,对用户也更友好。