pb powerbuilder 自定义datawindow滚动条

运行效果如图:
名称


设计要点,难点介绍:

一、滚动条使用4个statictext控件组成。
在这里插入图片描述
二、滚动控制
通过dw的maxPOS ,滑块与滑槽相对的移动,来换算滚动的pos值

long  ll_pos
long  ll_maxpos

ll_maxpos = long(idw_parent.Describe("DataWindow.HorizontalScrollMaximum"))
ll_pos    = ll_maxpos * ( il_vpos - il_minpos ) / ( il_maxpos - il_minpos )
idw_parent.Object.DataWindow.HorizontalScrollPosition = ll_pos

三、滑块的控制,需要用到3个事件

pbm_lbuttondown
pbm_lbuttonup
pbm_mousemove

在这里插入图片描述
还需要一个变量 ib_clicked,来保存鼠标左键状态
鼠标左键按下,ib_clicked=true
鼠标左键弹起,ib_clicked=false
pbm_mousemove事件:
ib_clicked=true时,通过xpos/ypos移动的相对距离,来控制dw的滚动。


long ll_x
if ib_clicked = true then
	ll_x  = st_slider.x
	ll_x += xpos - il_stpos
	if ll_x < il_minpos then
		st_slider.x = il_minpos
	elseif ll_x > il_maxpos then
		st_slider.x = il_maxpos
	else
		st_slider.x = ll_x
	end if
	il_vpos = st_slider.x	
	post event ue_vscroll()
end if

补充四:
滚动条显示和隐藏的自动判断,比如当前dw只有一页内容需要隐藏滚动条。
1、首先在之前创建的自定义对象中创建一个事件,用来判断是否需要显示滚动条,

//水平方向的判断
if long(idw_parent.Describe("DataWindow.VerticalScrollMaximum")) > 0 then
	visible = true
else
	visible = false
end if

2、然后在DW的自定义事件 pbm_hscroll 和pbm_vscroll 中触发它,这样新增/删除行、拉取数据、过滤数据,都会触发这个事件,这样就实现了自动显示和隐藏滚动条的效果。
在这里插入图片描述

补充五:
鼠标悬停按钮白色效果。
PB是没有鼠标移出控件事件的,因此无法直接实现,鼠标移入移出,按钮变色。
在这里插入图片描述
这里用MFC函数来实现
1、外部函数声明

function ulong SetCapture (ulong hwnd) library "user32.dll"
function boolean ReleaseCapture () library "user32.dll"

2、声明实例变量 boolean ib_MouseCaptured = false
pbm_mousemove 事件:

if not ib_MouseCaptured then
	SetCapture(handle(this))	
	textcolor = color_slider_selected
	ib_MouseCaptured = TRUE
else	
	textcolor = color_slider_bg
	ib_MouseCaptured = false
	ReleaseCapture()
end if
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值