VB屏幕保护程序设计

上传人:飞*** 文档编号:43550176 上传时间:2018-06-06 格式:DOC 页数:30 大小:2.44MB
返回 下载 相关 举报
VB屏幕保护程序设计_第1页
第1页 / 共30页
VB屏幕保护程序设计_第2页
第2页 / 共30页
VB屏幕保护程序设计_第3页
第3页 / 共30页
VB屏幕保护程序设计_第4页
第4页 / 共30页
VB屏幕保护程序设计_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《VB屏幕保护程序设计》由会员分享,可在线阅读,更多相关《VB屏幕保护程序设计(30页珍藏版)》请在金锄头文库上搜索。

1、屏幕保护程序设计屏幕保护程序设计屏幕保护程序简单功能实现屏幕保护程序简单功能实现2.5.1 文字单向移动功能实现文字单向移动功能实现本屏幕保护程序的主体功能是文字在屏幕左右移动,首先需要在屏幕上显 示文字。对于 Visual Basic 程序而言,在屏幕上显示文字,实际上是显示在某个 窗口上。显示文字可以采用两种方法:第一种方法是直接在窗口某个位置输出 文字,这种方法需要调用某个函数或窗口对象的方法并指定坐标,如果改变其 位置,则需要在新位置重新输出文字,并且将原来位置的文字擦除,这种文字 输出在设计时看不到效果,只有运行程序时才能看到效果;第二种方法是采用 某个对象显示文字,文字的移动仅仅需

2、要改变该对象的位置即可,并且在设计 时就能够看到效果。这里采用第二种方法显示文字,即采用前面介绍的标签对 象显示文字。 创建一个新的 Visual Basic 工程,系统自动创建一个窗口对象 Form1,并显 示 Form1 的对象设计窗口。向窗口 Form1 上拖放一个标签对象,系统自动命名 为 Label1(最后一个字符为数字 1,倒数第二个字符为小写字母 l 。Visual Basic 集成开发环境自动以数字后缀对新创建的控件对象命名,对下一个标签命 名为 Label2) ,选中该对象,定位到属性窗口,修改 Label1 对象的属性: Caption :欢迎使用 Visual Basic

3、 Font:宋体,二号字 给 Cpation 赋值的内容实际是一个字符串,在属性窗口内赋值时不能在其 前后加上双引号。如果在代码窗口内赋值则需要加上双引号。 调整 Label1 的长度和高度,使得文字正好显示在一行。图 2.4 标签 Label1 的设计效果标签对象 Label1 在窗口 Form1 上的位置由其 Left 和 Top 属性确定,如果 需要在水平方向移动,实际就是改变其 Left 属性。 先采用人工移动的方式,即运行时每用鼠标点击一次文字,文字向右移动 一定的距离。运行时的鼠标点击变成了 Windows 系统的消息,并转换成 Visual Basic 中的事件,在哪个对象上点击

4、,哪个对象就会接收到这个点击事件, Visual Basic 自动调用特定的某个子程序。Visual Basic 用 Click 表示鼠标点击事 件(鼠标的一次点击,也称为单击事件) ,如果在 Label1 对象上单击,则Label1 对象接收到这个单击事件,并自动调用子程序 Label1_Click。为了编写子程序 Label1_Click,需要进入代码窗口,方法有三个: 选择工程资源管理器窗口上方最左侧图标(View Code) 选择“View”菜单下“Code”子菜单 双击 Form1 的对象设计窗口 在代码窗口上方的两个组合框中,分别选择对象 Label1 和事件 Click,则 自动

5、产生该子程序的框架。 由于 Click 事件是标签对象的默认事件,只要选择了 Label1,就会自动产 生该子程序框架。另外,如果在对象设计窗口中直接双击 Label1 对象,进入代 码窗口后自动产生该子程序框架。 定位到子程序框架内部,输入代码如下: Private Sub Label1_Click()Label1.Left = Label1.Left + 100 End Sub 这句代码的含义是每次点击 Label1 对象,其 Left 属性在原有基础上增加 100,实际效果就是向右移动 100,单位就是前面介绍的 Twip(1/1440 英寸) 。 选择“Run”菜单下的“Start”子

6、菜单或直接点击工具栏上的小图标,运 行该程序。图 2.5 即为运行开始以及单击文字几次以后的文字位置。图 2.5 标签 Label1 的运行效果如果能够在某个特定的时间内自动执行上面这样的子程序,就可以实现文 字的自动移动。Visual Basic 提供的定时器对象可以实现这样的功能。 切换到对象设计窗口,有两种方法: 选择工程资源管理器窗口上方中间图标(View Object) 选择“View”菜单下“Object”子菜单 向窗口 Form1 上拖放一个定时器控件,自动命名为 Timer1,修改其属性: Interval:100 Enabled:True 双击 Timer1 对象,进入代码窗

7、口并自动产生子程序框架 Timer1_Timer, 将 Label1_Click 子程序中的代码拷贝到子程序 Timer1_Timer 中。 Private Sub Timer1_Timer()Label1.Left = Label1.Left + 100 End Sub 重新运行该程序,则文字会自动向右移动,如果需要改变文字移动的速度, 可以改变 Timer1 对象的 Interval,也可以修改上述代码中的移动量 100。 对于上面的两个子程序,都是由系统在接收到相应事件后自动调用的,程序员自己编写的代码中并没有调用它们的地方。这样的事件处理子程序除了由 系统自动调用外,也可以由程序员指定

8、调用。例如,上述两个子程序的内容实 际是一致的,没有必要重复写两次,完全可以由一个子程序调用另外一个子程 序,将上述程序修改如下: Private Sub Label1_Click()Timer1_Timer End Sub 在子程序 Label1_Click 中调用子程序 Timer1_Timer。程序运行效果与前面 程序一致。 由于在定时器内实现文字移动,人工移动的子程序 Label1_Click 实际上已 经没有用了,完全可以删除掉。如果不删除该子程序,则既可以自动移动,也 可以人工移动。2.5.2 文字双向移动功能实现文字双向移动功能实现到目前为止,实现了文字的自动移动,但当文字移动到

9、窗口最右侧后,看 不到文字了,需要将其反向,向左移动。从前面程序已知,向右移动是 Label1 的 Left 属性每次加上一个数值(100) ,向左移动则应该是 Label1 的 Left 属性每 次减去一个数值(100) 。那什么时候该减呢?应该是在文字的最右端碰上窗口 的右边框时,为此需要判断文字是否超出窗口右边框。 标签 Label1 只有 Left 属性而没有 Right 属性,但其提供了 Width 属性, Left 属性加上 Width 属性就是 Label1 对象的最右侧(Label1.Left+Label1.Width) 。前面已经介绍过,窗口对象 Form1 的宽度采用 Wi

10、dth 属性表示,但文字是 在其客户区内移动,这里需要采用其 ScaleWidth 属性。 在子程序 Timer1_Timer 内采用 If 语句比较 Label1.Left+Label1.Width 与 Form1.ScaleWidth,形式如下: If Label1.Left + Label1.Width = Form1.ScaleWidth ThenEnd If 标签 Label1 的 Left 属性每次减 100 的代码应该写在哪里?很多人的第一感 觉就是写在上面的这个条件语句内,如下所示: Private Sub Timer1_Timer()Label1.Left = Label1.

11、Left + 100If Label1.Left + Label1.Width = Form1.ScaleWidth ThenLabel1.Left = Label1.Left - 100End If End Sub 程序运行时发现,开始文字可以正确地向右移动,移动到某个位置后,文 字停止,说明上述程序逻辑存在问题。 分析上述代码,在每个时间间隔(100 毫秒)达到时,Label1 的 Left 属性 首先加上 100,然后判断 Label1 的最右侧是否超过窗口 Form1 的宽度,如果超 过,则将 Label1 的 Left 属性减去 100。开始阶段,由于条件不满足,每个时间 间隔内 L

12、abel1 的 Left 属性都加 100,文字正常向右移动。当 Label1 的最右侧超 过窗口宽度时,仍然是先将 Label1 的 Left 属性加上 100,再根据条件将其减去100,则在一个时间间隔内,Label1 的 Left 属性没有发生如何变化,导致文字 停止。 于是,有些人的想法是将减去 100 改成减去 200,希望实现向左移动。运 行程序后发现,文字在某个位置附近来回移动,并没有实现真正的向左移动。 究其原因,在条件满足后,Label1 的 Left 属性减去 200,文字向左移动了 100,下一个时间间隔内,条件变成了不满足,Label1 的 Left 加 100,文字又

13、向 右移动,再次满足条件,导致文字在该位置附近 100 范围内来回移动。 要实现真正的文字正反移动,一定要保证 Label1 的 Left 属性在某个时间间 隔内只能变化一次,要么加 100,要么减 100。为此,需要引入移动方向,正方 向移动时,Label1 的 Left 属性每次加 100,反方向移动时,Label1 的 Left 属性 每次减 100。 这样的移动方向采用变量表示,即需要定义一个变量表示文字的移动方向。 对于文字的左右移动,只有两个移动方向,即变量只有两个取值。由前面的变 量类型介绍已知,Visual Basic 的 Boolean 类型取值为 True 和 False

14、两个值,可 以满足,当然也可以采用 Byte、Integer 等类型。选择 Boolean 类型变量时,可 以人为规定:该变量为 False 时文字由左向右移动;该变量为 True 时文字由右 向左移动。如果选择 Byte 类型变量,可以人为规定:变量为 0 时表示由左向右 移动;变量为 1 时表示由右向左移动。 这个变量如果定义在子程序 Timer1_Timer 内部,则是一个局部变量(或称 过程变量) ,每次调用这个子程序时,需要重新申请内存保存它,其值为 0,而 调用结束时又释放其占用的内存区域,不能保留上次调用该子程序时该变量的 值。本程序中该变量必须能够保留上次的值,可以将其定义为窗

15、体变量,即定 义在窗口 Form1 的所有子程序之前(某个窗口的窗体变量都必须定义在所有子 程序的最前面) 。 有了表示方向的变量后,在子程序 Timer1_Timer 内,必须根据方向变量的 值决定 Label1 的 Left 属性是加 100 还是减 100。正方向移动时,要判断 Label1 的 Left 属性与 Width 属性之和是否超过窗口 Form 的 ScaleWidth 属性,如果超 过则改变方向;反方向移动时,判断 Label1 的 Left 属性是否小于 0,如果小于 则改变方向。实现代码如下所示: Dim ReverseDirection As Boolean Priv

16、ate Sub Timer1_Timer()If ReverseDirection = False ThenLabel1.Left = Label1.Left + 100If Label1.Left + Label1.Width = Form1.ScaleWidth ThenReverseDirection = TrueEnd IfElseLabel1.Left = Label1.Left - 100If Label1.Left = Form1.ScaleWidth ThenReverseDirection = TrueEnd IfElseLabel1.Left = Label1.Left - 100If Label1.Left 50 Then D1 = 1ElseLabel1.FontSize = Label1.FontSize - 2If Label1.FontSize 57 ThenKeyAscii = 0End If End Sub 添加以上代码后,重新运行程序,图 2.18 的文本框中只能输入 0 到 9 的字 符,输入的其它字符都没有显

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号