用PB实现应用程序的屏幕保护功能

软件世界

说到屏幕保护, 一般人会认为那是操作系统的事。其实在自己开发的应用程序中也可实现屏幕保护功能,而且这一功能除了确实能保护显示器屏幕外,还能增加意想不到的效果。比如能将软件版本、程序图标、开发人员介绍等相关信息以动态文字和动画反复播放。在PowerBuiler(以下简称PB)中使用idle()函数和idle事件可实现这一功能。

一、idle()函数和idle事件

idle()函数叫空闲函数,与timer()函数有点类似,功能是为系统设置一个定时器,时间一到就触发idle事件,函数的参数是以秒为单位的时间,idle事件叫做空闲事件,当系统接到鼠标或键盘激活的消息时中止idle事件;

二、制作屏幕保护窗口

1.新建一窗口w_save_screen作为屏幕保护窗口,因为屏幕保护界面一般是对整个屏幕的,窗口不含标题条和菜单条,这要求窗口的类型最好为response(响应窗口)。至于窗口显示什么样的文本、图片或动画,以何种方式显示,依开发者的爱好和用户的需求而定,本文的屏幕保护是动态显示一幅介绍软件的图片。
2.在屏幕保护窗口里加入一图形控件p_1,在窗口的open事件写以下代码:
//图形控件p_1装入当前路径下的一幅图,文件名:scgl6.bmp
p_1.picturename= "scgl6.bmp"
//每隔0.1秒触发一次timer事件,形成动画效果
timer(.1)
3.声明窗口的实例变量:
integer ii_i = 1 //用于动画可反复播放的循环数
4.在本例中,限于篇幅,为减少相似程序代码量,图形只可向下平移、向右下角斜移,读者可稍作改动就可写出向上、向左、向右平移,向四个角斜移斜的代码。在窗口的timer事件下写以下代码:
integer li_num //图片位置变量
if ii_i =1 then
for li_num=1 to 1540 step 1
//Y坐标递增,图形向下移
p_1.Move(1,li_num) next
ii_i ++
p_1.Move(1,1)
p_1.SetRedraw(true)
return
end if
if ii_i=2 then
for li_num=1 to 1540 step 1
//X、Y坐标同时递增,向右下角移动
p_1.Move(li_num, li_num)
next
ii_i = 1 //循环复位,重新开始下一轮
p_1.Move(1,1)
p_1.SetRedraw(true)
return
end if

三、应用程序代码的编写

打开应用程序的script 画板,在open事件中增加下面一行代码:
idle(120) //2分种没有鼠标或键盘消息触发idle事件
在idle事件中写下面的代码用于打开屏幕保护窗口
open(w_save_screen)
至此一个完整的屏幕保护功能就实现了。

四、说明

本例子较为简单,如启动屏幕保护的时间只能限制在2分钟,不够灵活,其实这一缺点也容易克服。方法是:把启动时间定义为一个全局变量,将它保存在一配置文件中,由用户自己设置启动时间,甚至可以关闭屏幕保护功能,每次应用程序启动时从配置文件中读取这一参数,然后传给idle()函数。