用VB怎么制作出屏幕保护程序

用VB怎么制作出屏幕保护程序,第1张

利用Visual Basic 制作屏幕保护程序非常容易。 ---- 一. 基本编程思路 ---- 大家都知道屏幕保护程序就是利用变换的颜色或图形以防止不变化的屏幕像素被损伤。所以,屏幕保护程序就是显示不断变化或移动的图形,并且当有鼠标移动或按键时能够终止的程序。 ---- 1. 编制屏幕保护图形 ---- 2. 隐藏鼠标 ---- 用ShowCursor Windows API 函数我们可以实现隐藏鼠标。 ---- 3. 检测鼠标和按键行为 ---- 检测上述行为以便退出屏幕保护程序 ---- 4. Windows 调用屏幕保护程序的参数命令 ---- /a 在显示器属性对话框中单击了改变口令按钮。 ---- /p 每当选中显示器属性对话框中屏幕保护程序标签时,在对话框显示预览效果。 ---- /c 在显示器属性对话框中单击了设置按钮。 ---- /s 在显示器属性对话框中单击了预览按钮或屏幕保护程序被系统正常调用。 ---- 5. 编译屏幕保护程序 ---- 其实任何VB应用程序都可作为屏幕保护程序来运行,但为了被Windows 95 所调用,需要将它作为屏幕保护程序来编译。首先进入VB5编程环境,编好程序后选择/File/Make project菜单项,然后在File Name文本框中将后缀名EXE改为SCR。最后单击OK按钮,将生成的SCR文件拷到Windows目录下,就完成了屏幕保护程序的创建。 ---- 二. 实例 ---- 下面就用一个实例给大家详细说明屏幕保护程序的制作。 Option Explicit

Dim quitflag As Boolean ‘声明终止程序标志变量

Dim lleft

‘声明隐藏或显示鼠标的API函数

Private Declare Function ShowCursor Lib "user32"

(ByVal bShow As Long) As Long

‘检测鼠标单击或移动

Private Sub Form_Click()

quitflag = True

End Sub

Private Sub Form_MouseMove(Button As Integer,

Shift As Integer, X As Single, Y As Single)

Static xlast, ylast

Dim xnow As Single

Dim ynow As Single

xnow = X

ynow = Y

If xlast = 0 And ylast = 0 Then

xlast = xnow

ylast = ynow

Exit Sub

End If

If xnow < >xlast Or ynow < >ylast Then

quitflag = True

End If

End Sub

‘检测按键

Private Sub Form_KeyDown(KeyCode As Integer,

Shift As Integer)

quitflag = True

End Sub

Private Sub Form_Load()

Dim X As Long

lleft = 0

‘横向滚动文字的起始X坐标

If App.PrevInstance = True Then

‘用APP对象的PrevInstance属性

Unload Me

‘防止同时运行屏幕保护程序的两个实例

Exit Sub

End If

Select Case UCase$(Left$(Command$, 2))

‘装载命令行参数

Case "/S"‘在显示器属性对话框中单击了

预览按钮或屏幕保护程序被系统正常调用。

Show

‘全屏显示Form1窗体

Randomize

‘初始化随机数生成器

X = ShowCursor(False)

‘隐藏鼠标

BackColor = vbBlack

Do

Timer2.Enabled = True

‘启动Timer2 ,显示屏幕保护滚动文字

DoEvents

‘转让控制权,以便检测鼠标和按键行为

Loop Until quitflag = True

‘运行屏幕保护滚动文字直至有鼠标和按键行为

Timer2.Enabled = False

‘终止滚动文字

Timer1.Enabled = True

‘启动Timer1,退出屏幕保护程序

Case Else

Unload Me

Exit Sub

End Select

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim X

X = ShowCursor(True)

‘显示鼠标

End Sub

Private Sub Timer1_Timer()

Unload Me

‘退出屏幕保护程序

End Sub

Private Sub Timer2_Timer()

显示横向滚动文字

lleft = lleft + 100

If lleft >= 11810 Then

lleft = 0

Lab1.Top = Int(Rnd * 7000)

End If

Lab1.Left = lleft

Timer2.Enabled = False

End Sub

---- 以上程序在HP 586/133上调试通过。

我说说屏保程序原理

首先屏保程序实际是exe文件,

把编译好的exe文件的扩展名改成scr,放到windows的system32就可以被windows选择作为屏保

例如1.exe改成1.scr

剩下的编程就是exe文件的开发问题

实现程序的动画效果,场景切换等功能

实现响应按键 和鼠标活动退出等

本实例的项目文件SCRNSAVE.MAK中包括两个文件: SCRNSAVE.BAS、BLANK.FRM。这两个文件的作用分别说明如下。

一、SCRNSAVE.BAS

此模块文件包含四个子程序: HideMouse,ShowMouse,EndScrnsave,Main。前三个子程序分别用于隐藏鼠标光标、重新显示鼠标光标和结束屏幕保护程序返回Windows。当在Windows控制面板的桌面对话框中对屏幕保护程序进行“设置”时,Windows会传给相应的屏幕保护程序一个命令行参数Command$,此命令行参数含有“/c”开关,要求屏幕保护程序提供自己的设置对话框。当在桌面对话框中对屏幕保护程序进行“测试”或在设定的时间内无键盘和鼠标 *** 作而激活屏幕保护程序时,Command$中含有“/s”开关,要求屏幕保护程序立即开始运行。本文提供的屏幕保护程序实例在启动时首先执行Main子程序,Main子程序通过检查Command$来决定后续 *** 作。若Command$中含有“/c”开关,则利用MsgBox显示简单的提示信息, 说明本程序未提供任何设置选项;若Command$中含有“/s”开关,则启动一覆盖全屏幕的黑色窗体BlankForm,并在此窗体上显示动画,进行正常的屏幕保护工作。

为了在程序启动时首先执行Main子程序,应从VB的Options菜单中选择“Project...”项,在Project Options对话框中把Start Up Form设置为“Sub Main”。

二、BLANK.FRM

此文件是屏幕保护程序的主体。它负责建立一个覆盖全屏幕的黑色窗体BlankForm,并在此窗体上显示动画。它还负责监视键盘和鼠标事件,一旦有键盘或鼠标动作,则立即结束屏幕保护程序的运行返回Windows。为了建立一个无边框、无标题条的覆盖全屏幕的黑色窗体,需将BlankForm窗体属性中的BorderStyle置为0-None,Caption置为空,ControlBox置为False,BackColor置为&H00000000&,并在Form_Load中利用Move 0,0,Screen.Width,Screen.Height将其放大为覆盖整个屏幕。

本例显示的动画是根据《电脑爱好者》1995年第8期“动画制作秘籍(一)”中的CIRCSHOW.BAS程序改编而成。动画部分是屏幕保护程序中最精彩的部分。实际上,它也是读者为了编写自己的屏幕保护程序而唯一需要修改的部分,也是读者的创意可以尽情发挥的部分。读者可以充分发挥自己的想象力和创造力,编写出精美动人的动画。本例通过Form_KeyDown和Form_MouseMove来监视键盘和鼠标事件的发生。一旦有键盘输入,则立即结束屏幕保护程序的运行,返回Windows。鼠标则必须在移动了至少三个像素时方能结束屏幕保护程序的运行,这样可避免因敲工作台等偶然的事件而使屏幕保护程序的运行中断。

在建立了以上两个文件后,将其加到项目文件SCRNSAVE.MAK中,生成EXE文件。在生成EXE文件时, 应注意如下两点:

1.在Make EXE File对话框的“Application Title”域中应填写一个特殊的名字。这个名字必须以“SCRNSAVE”打头,随后是你要在控制面板的屏幕保护程序清单中显示的名字。例如, 本例所用标题为“SCRNSAVE VB Screen Saver”。

2.生成的EXE文件的扩展名必须为SCR而不能是EXE。本例所取EXE文件名为SSVB.SCR(按照惯例所有的屏幕保护程序的名字都以SS打头)。读者所要做的最后一件事是将SSVB.SCR拷到自己的Windows目录下, 这样Windows才能找到它, 并在控制面板的屏幕保护程序清单中显示出来。本文实例在PWIN 3.2、VB 3.0环境下调试通过。

清单1: SCRNSAVE.BAS

Declare Function ShowCursor Lib 〃USER〃 (ByVal fShow As Integer) As Integer

Sub EndScrnsave ()

ShowMouse ′使鼠标重新可见

End ′然后退出屏幕保护程序

End Sub

Sub ShowMouse ()

′这个子程序使鼠标箭头重新出现在屏幕上

While ShowCursor(True) <0

Wend

End Sub

Sub HideMouse ()

′这个子程序把屏幕上的鼠标箭头隐蔽起来

While ShowCursor(False) >= 0

Wend

End Sub

Sub Main ()

′只允许屏幕保护程序的一个实例运行

If App.PrevInstance=True Then

Exit Sub

End If

′检查一下应该空屏还是显示设置对话框

If InStr(Command$, 〃/c〃) Then

MsgBox 〃No setup options for this screen saver〃 ′显示设置对话框

ElseIf InStr(Command$, 〃/s〃) Then

BlankForm.Show ′开始运行屏幕保护程序

End If

′等到没有要显示的窗体时就退出

While DoEvents() >0

Wend

End Sub

清单2: BLANK.FRM

(1)窗体和控制属性

对象 属性设置

FormBackColor &H00000000&

BorderStyle0-None

Caption

ControlBox False

Name BlankForm

ScaleMode3-PixelTimerInterval1NameTick

(2)窗体程序

Dim r, f, p, X0, Y0

Dim lastX, lastY

Const pi = 3.14159

Sub Form_Load ()

Move 0, 0, Screen.Width, Screen.Height ′将窗体放大到覆盖全屏幕

HideMouse

r = 50

p = 0

f = 0

X0 = ScaleWidth / 2 - 1

Y0 = ScaleHeight / 2 - 1

End Sub

Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)

EndScrnsave ′结束屏幕保护程序的运行

End Sub

Sub Form_MouseMove (Button As Integer, Shift As Integer,

X As Single, Y As Single)

If IsEmpty(lastX) Or IsEmpty(lastY) Then

lastX = X

lastY = Y

End If

′仅当鼠标移动足够迅速(一次2个象素以上)才恢复屏幕

If Abs(lastX - X) >2 Or Abs(lastY - Y) >2 Then

EndScrnsave ′结束屏幕保护程序

End If

lastX = X

lastY = Y ′记住最后的位置

End Sub

Sub Tick_Timer ()

Dim X As Single

Dim Y As Single

If f = 0 Then

c = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd)

X = r * Cos(2 * pi * p / 360) + X0

Y = r * Sin(2 * pi * p / 360) + Y0

Line (X0, Y0)-(X, Y), c

Circle (X, Y), 2, c

If r = 200 Then

f = 1

Exit Sub

End If

r = r + 1 / 2

p = p + 7

ElseIf f = 1 Then

c = RGB(0, 0, 0)

X = r * Cos(2 * pi * p / 360) + X0

Y = r * Sin(2 * pi * p / 360) + Y0

Line (X0, Y0)-(X, Y), c

Circle (X, Y), 2, c

If r = 50 Then

f = 0

Exit Sub

End If

r = r - 1 / 2

p = p - 7

End If

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11158490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存