标题在PB中改变窗口控件的大小
栏目软件世界
作者张天清
发布2001年40期
在Power Builder(以下简称PB)编程中,良好的用户界面将为你的程序增色不少。程序运行时,用户通过改变控件大小获取屏幕不能完全显示的信息,将极大的增加用户对程序的好感。比如一个窗口上有三个数据窗口,两个数据窗口位于窗口上半部,一个数据窗口位于窗口的下半部(如Foxmail的主窗口布局),用户通过可以改变数据窗口大小,增加任意数据窗口的可视范围以显示更多的信息。实现方法如下:
1.建立一窗口,名为w_1,类型为main,title为“控件拖动”;
2.在w_1上放置三个数据窗口控件,窗口上方左侧数据窗口为dw_1,右侧数据窗口为dw_2,窗口下方数据窗口为dw_3(布局像一倒立的品字);在dw_1和dw_2之间放置一静态文本框,名为st_1,在dw_1及dw_3之间放置一静态文本框,名为st_2;st_1的autodrag为false,enabled为true,pointer为SizeWE!,st_2的autodrag为false,enabled为true,pointer为SizeNS!。
3.在w_1的resize事件中写如下代码:
int allxally
allx=this.workspacewidth()
ally=this.workspaceheight()
st_1.width=10 //设置拖动条大小及位置
st_1.height=ally/2 - 100
st_1.x=allx/2
st_1.y=100
st_2.width=allx - 200
st_2.height=10
st_2.x=100
st_2.y=ally/2
dw_1.width=allx/2 - 100 //设置数据窗口大小及位置
dw_1.height=ally/2 - 100
dw_1.x=100
dw_1.y=100
dw_2.width=allx/2 - 100 - st_1.width
dw_2.height=ally/2 - 100
dw_2.x=allx/2 + st_1.width
dw_2.y=100
dw_3.width=allx - 200
dw_3.height=ally/2 - 100 - st_2.height
dw_3.x=100
dw_3.y=ally/2 + st_2.height
以上代码保证在窗口大小改变时,各控件位置及大小随之改变。
接下来分别为st_1、st_2定义以下事件:
事件mouse_on 事件id:pbm_mousemove
事件mouse_up 事件id:pbm_lbuttonup
事件mouse_down 事件id:pbm_lbuttondown
然后为st_1、st_2的事件编写代码:
//st_1事件mouse_on代码:
if keydown(KeyLeftButton!)then //按下鼠标左键并移动鼠标时,拖动条移动
this.x=parent.pointerx
end if
//st_1事件mouse_down代码:
this.backcolor=0 //按下鼠标左键时,拖动条背景色为黑色
//st_1事件mouse_up代码:
this.backcolor=parent.backcolor //松开鼠标左键时,拖动条背景色为窗口背景色
dw_2.x=this.x+this.width //重设控件位置及大小
dw_2.width=parent.workspacewidth() - 100 - dw_2.x
dw_1.width=this.x - dw_1.x
//st_2事件mouse_on代码:
if keydownKeyLeftButtonthen
this.y=parent.pointery()
end if
//st_2事件mouse_down代码:
this.backcolor=0
//st_2事件mouse_up代码:
this.backcolor=parent.backcolor
dw_3.y=this.y+this.height
dw_3.height=parent.workspaceheight()- 100 - this.y - this.height
dw_1.height=this.y - dw_1.y
st_1.height=dw_1.height
dw_2.height=dw_1.height
运行窗口w_1,当鼠标形状变成箭头形状时,沿箭头方向按下鼠标左键移动鼠标然后松开鼠标左键,窗口控件的大小随之改变。如果数据窗口内包含一些在本数据窗口不能完全显示的数据,用户只须按下鼠标左键移动鼠标便能改变数据的可视范围,给用户带来极大的方便。该程序在PB 6.5/Windows 98SE环境下调试通过。