控制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
灵活地控制鼠标位置,能使程序更加有趣,对用户也更友好。