中国计算机报1998年第59期  

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

 back.gif (1185 字节)