pb知识总结.docx
- 文档编号:6649244
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:31
- 大小:246.30KB
pb知识总结.docx
《pb知识总结.docx》由会员分享,可在线阅读,更多相关《pb知识总结.docx(31页珍藏版)》请在冰豆网上搜索。
pb知识总结
用PowerBuilder制作指示灯
1999-04-1000:
00 来源:
作者:
责任编辑:
·yesky 评论(0)
相信大家在安装各种软件或微软公司产品时都会注意到那直观可爱的条状指示灯,它总是以最直接的方式告诉我们工作的进程情况,在PowberBuilder中也可以实现。
1.创建一个应用程序(working-out)。
2.创建一个窗口(w_01)。
3.在应用程序的Open事件中最未尾Open()函数改为Open(w_01)。
4.编辑w_01窗口。
5.添加三个控件在w_01窗口上,即两个Rectangle:
r_1,r_2和一个commandButton:
cb_1。
6.将r_1的FillColor:
设为White将LineColor:
设为Black,将X设为243,Y设为645,Width设为1541,Height设为113。
按Apply或OK即可。
7.将r_2的FillColor:
设为Blue将LineColor:
设为White,将X设为261,Y设为661,Width设为5,Height设为85。
按“Apply”或“OK”即可。
8.在cb_1的clicked事件中添写:
r_1.visible=true
r_2.visible=true
intlock
lock=0
dowhilelock<100
lock=lock+1
r_2.width=lock*15
loop
9.按“Run”键运行此程序,就会看到一条从头走到尾的像安装Win98一样的指未灯出现在你的程序窗口上。
注*此程序只是作为一个指示灯,那什么时候指示灯该向前走,什么时候指示灯该停,只要想办法用变量给Lock赋值就可以了。
(Lige)
用PowerBuilder制作多媒体动画
2001-02-0600:
00
在枯燥乏味的应用程序界面上嵌入动感十足的图片不仅能为程序增色不少,而且还可以吸引用户的注意力。
PowerBuilder(以下简称PB)中有图片控件,但是只能插入静止的位图图片(.BMP),那么如何使图片在PB窗口中动起来呢?
下面就来介绍用PB制作多媒体动画的方法。
一、实现原理
通过PB工具栏的控件按钮在窗口中放入一个图片控件,因为在动画序列的每一阶段都需要一幅标准的位图图片。
通常在应用程序的请求之下,MicrosoftWindows会在固定的时间间隔发送事件消息。
利用PowerBuild的Timer()函数,可以打开这个定时器,从而窗口可在每个间隔内收到一个Timer()事件。
当窗口收到消息时,改变图片控件的属性以显示动画系列中一幅不同的帧。
当窗口关闭时,须告知Windows停止发送Timer事件。
二、操作步骤
1.打开Application画板,创建一个新的应用库和相应的应用程序对象,分别叫做animate.pbl和animate。
当提示是否生成应用程序模板时,回答No。
2.使用Windows画板创建一个新窗口。
点击Windows画板,弹出SelectWindows窗口,点按“New”按钮建立一个新窗口。
在新建窗口上按右键,选弹出菜单的“Properties...”,弹出Windows属性窗口,点General页,在WindowsType的下拉列表中任选一种类型,如Response,接着设置窗口的属性Visible和Enabked为TRUE,其它属性都设为FALSE,最后以w_animate为窗口名存盘。
3.在窗口中添置图片控件
点按Picture控件按钮,并将其命名为P_1并设置FileName为“lxscr000.BMP”。
为了在显示位图时得到更好的执行效果,设置图片控件的OriginalSize属性为TRUE。
4.为w_animate窗口定义实例变量,以便程序在脚本的执行期间内用来保存值。
点击菜单declare中的InstanceVariables菜单项,作如下变量声明:
//所设的变量是一个数组,其中包含了为生成动画而显示的每一幅位图的文件名,它将为窗口提供一系列图像并循环显示
stringis_bitmaps[]={″lxscr000.bmp″,″lxscr001.bmp″,″lxscr002.bmp″,″lxscr003.bmp″,″lxscr004.bmp″,″lxscr005.bmp″}
//用于跟踪当前的位图数,初始值为1指示第一张图片
integerii_picture=1
//可得到的最大位图数
integerii_maxpicture
5.初始化程序,以使窗口得到循环显示的位图数,同时设置要显示的第一幅位图以及安排Timer事件的发生。
在w_animate的open事件中编写如下代码:
//获取数组变量中的最大位图数
ii_maxpicture=UpperBound(is_bitmaps[])
//设置位图显示初始值
p_1.picturename=is_bitmaps[ii_picture]
//每秒钟给w_animate窗口发送一个Timer事件
timer(1,this)
6.当窗口收到一个Timer事件后,它应该前进到序列中的下一帧。
为Timer事件编写如下脚本。
ifii_picture=ii_maxpicturethen
ii_picture=1
else
ii_picture=ii_picture+1
endif
p_1.picturename=is_bitmaps[ii_picture]
7.在窗口的Close事件中编写如下代码使当窗口关闭时关掉Timer事件。
Timer(0,this)
8.编写脚本实现鼠标单击w_animate窗口时关闭该窗口。
在w_animate的clicked事件中键入close(this)。
9.编写脚本实现按任意键时关闭该窗口。
在w_animate的key事件中键入close(this)。
10.打开Application画板,按下面的方式处理应用程序的Open事件。
Open(w_animate)
11.保存并运行此应用程序。
三、编程要点
1.Windows能够以每秒钟18次的速度发送Timer事件,并支持16个定时器同时运行,当不再使用时将定时器关闭是一个很好的习惯。
2.如果你想加快显示速度,可将第五步中Timer()函数的第一个参数改小,如0.5,反之改大。
这样在屏幕上就可得到一幅生动的多媒体动画。
你可以根据自己的喜好随意更改循环显示的图片,也可把上述程序应用于任何窗口界面,为你的应用程序界面增添动感。
示例中多媒体动画将一直持续显示,直到你用鼠标点击窗口或按下任意键。
(湖北 卢群)
PowerBuilder制作IE风格的图标按钮
本站最新推出无须注册直接投稿投递文章减小字体增大字体本文介绍在PowerBuilder中实现IE风格的图标按钮的技巧。
在C++Builder开发工具中,有一种图标按钮(SpeedButton),这种按钮可以在鼠标移入按钮后,在图片的周围会出现凸出的边框,鼠标移出按钮后边框消失。
而在PowerBuilder中没有提供这种功能的按钮,为了使开发的应用程序界面更丰富,我们使用自定义图形控件(Picture)扩展并实现了----本文介绍在PowerBuilder中实现IE风格的图标按钮的技巧。
在C++Builder开发工具中,有一种图标按钮(SpeedButton),这种按钮可以在鼠标移入按钮后,在图片的周围会出现凸出的边框,鼠标移出按钮后边框消失。
而在PowerBuilder中没有提供这种功能的按钮,为了使开发的应用程序界面更丰富,我们使用自定义图形控件(Picture)扩展并实现了此功能,这种方法设计出的程序简洁实用。
----一、实现功能
----按钮可以显示四种状态图形:
----1、Normal状态;
----2、Disabled状态;
----3、MouseOver状态(鼠标进入按钮区);
----4、ClickDown状态(鼠标按下)。
----二、关键方法
----1、当鼠标进入按钮区域时,控件图片改换成MouseOver状态的图片,并设置状态信号;
----2、鼠标滑入按钮区域后用WindowsAPI函数SetCapture来捕获鼠标输入消息,跟踪鼠标位置;
----3、当监测到鼠标滑出按钮区域时,用ReleaseCapture函数释放鼠标捕获,恢复按钮图片到Normal状态并设置状态信号;
----4、改变控件的图片(PictureName)前,先用ReleaseCapture释放鼠标捕获,然后改变PictureName属性值,接着重新调用SetCapture函数,因为改变图片后PowerBuilder重新建立了控件窗口,窗口的句柄(hWnd)也随之改变了。
----三、设计过程
----1、新建“UserObject”-〉选择Visual的Standard类-〉选择“Picture”;
----2、定义全局的或局部的外部函数:
//*******************************
//DeclareExternalFunctions
//*******************************
functionulongSetCapture
(ulonghwnd)library"user32.dll"
functionbooleanReleaseCapture
(ulonghwnd)library"user32.dll"
functionbooleanDrawEdge(ulonghdc,
refrectqrc,uintedge,uintgrfFlags)
library"user32.dll"
----3、定义结构数据类型
RECT
{
longleft
longtop
longright
longbottom
}
----4、定义控件共享变量:
//*******************************
//DeclareSharedVariables
//*******************************
booleansb_SuppressHoverBorder
----5、定义控件实例变量:
//*******************************
//DeclareInstanceVariables
//*******************************
Private:
booleanib_MouseCaptured
Public:
stringis_PicNormal
stringis_PicDisabled
stringis_PicMouseOver
stringis_PicClickDown
intin_State
----6、定义用户事件:
//*******************************
//DeclareUserEvents
//*******************************
EventName="mousemove",ID="pbm_mousemove"
EventName="lbuttondown",ID="pbm_lbuttondown"
EventName="lbuttonup",ID="pbm_lbuttonup"
----7、编写事件代码:
//“Constructor”事件代码
//***beginconstructorevent***
//
is_PicNormal=this.PictureName
is_PicDisabled="Disabled状态图片.bmp"
is_PicMouseOver="MouseOver状态图片.bmp"
is_PicClickDown="ClickDown状态图片.bmp"
in_State=0
sb_SuppressHoverBorder=FALSE
//
//***endconstructorevent***
//“MouseMove”事件代码
//***beginmousemoveevent***
//
rectlr_Border
ifnotib_MouseCapturedthen
ifflags<>1then
this.PictureName=is_PicMouseOver
else
//LeftButtonDown
this.PictureName=is_PicClickDown
endif
in_State=1
SetCapture(handle(this))
ib_MouseCaptured=TRUE
ifnotsb_SuppressHoverBorderthen
lr_Border.left=0
lr_Border.top=0
lr_Border.right=UnitsToPixels
(this.Width,XUnitsToPixels!
)
lr_Border.bottom=UnitsToPixels
(this.Height,YUnitsToPixels!
)
ifflags<>1then
DrawEdge(GetDC(handle(this)),
lr_Border,4,1+2+4+8)
else
//LeftButtonDown
DrawEdge(GetDC(handle(this)),
lr_Border,2,1+2+4+8)
endif
endif
else
//检测鼠标是否滑出按钮区域?
if(XPos<0orYPos<0)or(XPos>
this.WidthorYPos>this.Height)then
ib_MouseCaptured=FALSE
ReleaseCapture()
in_State=0
this.PictureName=is_PicNormal
endif
endif
return1
//
//***endmousemoveevent***
//“LButtonDown”事件代码
//***beginlbuttondownevent***
//
rectlr_Border
ifib_MouseCapturedthen
ib_MouseCaptured=FALSE
ReleaseCapture()
endif
in_State=2
this.PictureName=is_PicClickDown
SetCapture(handle(this))
ib_MouseCaptured=TRUE
ifnotsb_SuppressHoverBorderthen
lr_Border.left=0
lr_Border.top=0
lr_Border.right=UnitsToPixels
(this.Width,XUnitsToPixels!
)
lr_Border.bottom=UnitsToPixels
(this.Height,YUnitsToPixels!
)
DrawEdge(GetDC(handle(this)),
lr_Border,2,1+2+4+8)
endif
return1
//
//***endlbuttondownevent***
//“LButtonUp”事件代码
//***beginlbuttonupevent***
//
rectlr_Border
ifib_MouseCapturedthen
ib_MouseCaptured=FALSE
ReleaseCapture()
endif
if(XPos<0orYPos<0)or(XPos>
this.WidthorYPos>this.Height)then
in_State=0
this.PictureName=is_PicNormal
else
in_State=1
this.PictureName=is_PicHover
SetCapture(handle(this))
ib_MouseCaptured=TRUE
ifnotsb_SuppressHoverBorderthen
lr_Border.left=0
lr_Border.top=0
lr_Border.right=UnitsToPixels
(this.Width,XUnitsToPixels!
)
lr_Border.bottom=UnitsToPixels
(this.Height,YUnitsToPixels!
)
DrawEdge(GetDC(handle(this)),
lr_Border,4,1+2+4+8)
endif
endif
//产生Clicked事件
this.eventpostclicked()
return1
//
//***endlbuttonupevent***
//“Other”事件代码
//***beginotherevent***
//
ifmessage.number=533andib_MouseCapturedthen
//wm_CaptureChanged
ib_MouseCaptured=FALSE
in_State=0
this.PictureName=is_PicNormal
return1
endif
return0
//
//***endotherevent***
---- 四、简要说明
----1、ib_MouseCaptured变量是作为MouseMove事件的刷新控件图片的信号灯及判断是否已安装了鼠标捕捉器;
----2、sb_SuppressHoverBorder变量,默认值为FALSE,当值为TRUE时,控件不绘制凸或凹边框;
----3、“Other”事件,当鼠标捕捉器被释放或被替换时会触发WM_CAPTURECHANGED事件,例如:
您在Clicked事件中调用MessageBox函数时,将触发WM_CAPTURECHANGED事件,在此事件代码中恢复按钮到Normal状态。
本文来自:
中科软件园()详细出处参考:
s)),
lr_Border,4,1+2+4+8)
endif
endif
//产生Clicked事件
this.eventpostclicked()
return1
//
//***endlbuttonupevent***
//“Other”事件代码
//***beginotherevent***
//
ifmessage.number=533andib_MouseCapturedthen
//wm_CaptureChanged
ib_MouseCaptured=FALSE
in_State=0
this.PictureName=is_PicNormal
return1
endif
return0
//
//***endotherevent***
---- 四、简要说明
----1、ib_MouseCaptured变量是作为MouseMove事件的刷新控件图片的信号灯及判断是否已安装了鼠标捕捉器;
----2、sb_SuppressHoverBorder变量,默认值为FALSE,当值为TRUE时,控件不绘制凸或凹边框;
----3、“Other”事件,当鼠标捕捉器被释放或被替换时会触发WM_CAPTURECHANGED事件,例如:
您在Clicked事件中调用MessageBox函数时,将触发WM_CAPTURECHANGED事件,在此事件代码中恢复按钮到Normal状态。
让PowerBuilder制作查询系统的界面更加酷
本站最新推出无须注册直接投稿投递文章减小字体增大字体在管理信息系统中,查询系统占了相当重要的地位(SQL的中文就是结构化查询语言),因为它是向用户开放的,界面一定要友善,要让别人一看就会操作。
根据查询结果记录的个数来分,查询可分为两种:
1.唯一记录查询。
如:
从键盘输入记录号,查询该人的档案。
1.模糊查询,结果记录可能很多。
如下例电脑红娘,用鼠标做完选择后按查询,结果会有许多记录号行。
3.若这时用鼠标点击某行记录行,在管理信息系统中,查询系统占了相当重要的地位(SQL的中文就是结构化查询语言),因为它是向用户开放的,界面一定要友善,要让别人一看就会操作。
根据查询结果记录的个数来分,查询可分为两种:
1.唯一记录查询。
如:
从键盘输入记录号,查询该人的档案。
1.模糊查询,结果记录可能很多。
如下例电脑红娘,用鼠标做完选择后按查询,结果会有许多记录号行。
3.若这时用鼠标点击某行记录行,若旁边出现该记录号的具体详细的个人档案。
用鼠标点击另一记录行,则旁边出现另一记录号的具体详细个人档案,这叫记录的连动。
这里我们以制作婚姻介绍系统为例子,包括了难度较大的模糊查询,多按钮式选择界面,记录的连动。
工作原理:
通过自己定义变量的来传递选择的条件,如:
性别可定义变量sex,年龄可定义变量old。
注意变量要先定义,后使用。
一.多按钮选择界面的制作。
在分组框内多个RadioButton在同一时刻只能选中一个。
操作步骤:
新建一名字为b2的窗口,窗口内放置控件如下图。
定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pb 知识 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)