一、滚动条使用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
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
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
textcolor = color_slider_bg
ib_MouseCaptured = false
ReleaseCapture()
end if
需要对这一列的某些行修改,而某些行不能修改,这就要用到这一列的protect属性了。打开列的属性中的Expressions,在protect中输入条件判别。在数据窗口中如果要使其中一列的属性为只读,也就是不允许用户修改,那么只需简单地将这一列的Table Order 设置成0就可。例如:允许用户修改新增加的记录,而检索出来的记录则不允许修改。这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。// 变更记录: 变更或版本更新的时候。// 功能说明:用于冻结左边的滚动栏。
pb中DataWindow的打印输出(2)
-PowerBuilder 提 供 了 一 组 打 印 控 制 函 数 来 控 制 要 交 给 打 印 机 打 印的 对 象。 第 一 个 函 数P rintOpen() 在 这 章 的 前 面 我 们 已 介 绍过 了, 其 它 还 有:
----PrintCancel(print_job_number)
---- 这个 函 数 将 中 止 打 印 作 业 号 所 打 印 的 作 业, 不 发 送 任 何内 容 给 打 印 机。
----datawindowcontrol.PrintCancel()
---- 这个 函 数 与 上 一 函 数 的 区 别 是: 这 个 函 数 取 消 的 是 用Datawindowcontrol.Print() 提 交 的 作 业。
----PrintClose(print_job_number)
在Powerbuilder中,当Datawindow所显示的数据超过一个数据窗口时,常常通过单击滚动条控件使Datawindow中的容上下滚动,这样有时带来许多不便,如从某行开始滚动到现在过去了几行或几页,往上或往下滚动几行或几页都不好掌握,Powerbuilder中提供了几种方法可以解决这些问题,例如,按Pageup、Pagedown、↑、↓。这里主要介绍通过定义按钮、使用滚动函数来解...
前面某节里已经说过,PB是基于数据库的开发工具,因此对于与数据相关的操作都非常简单。在其它开发工具中进行数据保存时,一般都要写SQL语句来执行。而在PB中就非常简单了。
1、如果数据窗口中的内容是从单一的表中得来的。那么保存数据只需几行代码:
2、如果表中的数据来源于多个表或表与视图的联合查询等,只对其中的一个或几个表进行保存时,也不是很麻烦,但要简单设置一下。
进入DataWindow
PowerBuilder学习笔记(4)数据窗口(DataWindow)
一.数据窗口对象(Object)与数据窗口控件(Control)
数据窗口对象是利用PowerBuilder所提供的数据窗口绘图器所产生的对象,可以利用对象管理库(Library Painter)中看到数据窗口对象的存在。
数据窗口控件是窗口上许多控件中的一种,用来将数据窗口对象的数据显示在窗口控件上面,