PowerBuilder鼠标移入移出事件

PowerBuilder中只有窗口和富文本有mouse事件外,其他都没有

PowerBuiler中没有鼠标移入移出的直接事件,需要我们自己定义

1.首先需要定义一个结构,用来存储鼠标的坐标(position)

PowerBuilder鼠标移入移出事件_第1张图片

2.声明两个全局外部函数

FUNCTION ulong GetCursorPos(ref position lpPoint) LIBRARY "user32.dll"
FUNCTION ulong ScreenToClient(ulong hwnd,ref position lpPoint) LIBRARY "user32.dll"

PowerBuilder鼠标移入移出事件_第2张图片

3.添加timer

在在窗口的open事件或者某个触发事件中添加如下代码:
Timer(0.1)//设置计时器,计时间隔为0.1秒

4.在窗口的timer事件中添加如下代码

position myPA
GetCursorPos(myPA)//获取当前光标位置
ScreenToClient(Handle(this),myPA)//转化为客户区表示
Integer li_xpos,li_ypos
li_xpos = myPA.xpos
li_ypos = myPA.ypos
st_2.Text = String(li_xpos) + ',' + String (li_ypos)

Integer li_dww,li_dwh
li_dww = this.tv_parentid.Width//获取数据窗口的Width属性(单位是PB Units)
li_dwh = this.tv_parentid.Height//获取数据窗口的Height属性(单位是PB Units)
li_dww = UnitsToPixels(li_dww,XUnitsToPixels!)//把用PB Units为单位的Width转化为用Pixels为单位
li_dwh = UnitsToPixels(li_dwh,YUnitsToPixels!)//把用PB Units为单位的Height转化为用Pixels为单位
st_3.Text = String(li_dww) + ',' + String (li_dwh)

Integer li_dwx,li_dwy
li_dwx = this.tv_parentid.X//获取数据窗口的X属性(与窗口左边界的距离,单位是PB Units)
li_dwy = this.tv_parentid.Y//获取数据窗口的Y属性(与窗口上边界的距离,单位是PB Units)
li_dwx = UnitsToPixels(li_dwx,XUnitsToPixels!)//把用PB Units为单位的X转化为用Pixels为单位
li_dwy = UnitsToPixels(li_dwy,YUnitsToPixels!)//把用PB Units为单位的Y转化为用Pixels为单位
st_4.Text = String(li_dwx) + ',' + String (li_dwy)

IF li_xpos < li_dwx OR li_ypos < li_dwy OR li_xpos > li_dwx + li_dww OR li_ypos > li_dwy + li_dwh THEN
 w_departmentdetail.backcolor=rgb(0,  0,  255)//光标在控件外,背景为为蓝色
ELSE
 w_departmentdetail.backcolor=rgb(255,  0,  0)//光标在控件内,背景为红色
END IF

5.效果图

PowerBuilder鼠标移入移出事件_第3张图片

中间的灰色区域是我的数据窗口tv_department

右侧的三行数分别为:st_2,st_3,st_4

你可能感兴趣的:(PowerBuilder)