Windows操作平台設有一個屏幕的保護措施,即屏幕保護功能。經常在Windows操作平台上使用電腦的人們對系統提供給我們的幾個屏幕保護程序是不是感到非常平常了,沒有新鮮感了,是不是想自己設計屏幕保護程序。下面介紹如何利用VB設計用戶自己的屏幕保護程序。屏幕保護程序可以保護顯示屏不被損壞,同時節約能源。作為屏幕保護程序,應該具有如下特性:
1)屏幕保護程序運行時,鼠標光標被自動隱藏,在程序結束時,光標顯示。2)當單擊、移動鼠標或按下鍵盤時,屏幕保護結束,回到正常操作狀態。為了實現這些特性,在編寫VB應用程序時,可以采用如下方法:
1、改變窗體屬性通常VB應用程序的窗體都采用有邊框的窗體外觀,但作為屏幕保護程序,應設置窗體為無邊框,且為最大化。
2、隱藏及顯示鼠標光標在Visual Basic應用程序中隱藏及顯示鼠標光標需要運用Windows的API函數,該函數名為ShowCursor。當用參數值True調用時顯示鼠標光標,當用參數值False調用時,鼠標光標自動隱藏。
3、檢測鼠標移動VB中有一個檢測鼠標移動的對象事件MouseMove事件。MouseMove事件通常在應用程序啟動時就會觸發,有時在鼠標並未移動的情況下,MouseMove事件仍有可能被觸發。因此如果在程序中直接用MouseMove事件檢測鼠標是否發生了移動,並不能正確反映鼠標的移動狀況。應該在MouseMove事件中編寫代碼加以控制。
為了正確反映鼠標的移動,先用變量記錄下程序運行時的鼠標當前位置,然後用另外一組變量記錄鼠標移動後的位置,當鼠標移動前後的位置差大於一定范圍時,觸發MouseMove事件。編寫代碼如下:
Private Sub Form-MouseMove(Button As Integer,shift As Inteqer,X As Single,Y As Single)
Static currentX,currentY As Single
Dim orignX,orignY As Single
’把當前的鼠標值賦給orignX和orignY
orignX=X
orignY=Y
’初始化currentX和currentY
if currentX=0 and currentY=0 Then
currentX=orignX
currentY=orignY
Exit Sub
Endif
’當鼠標移動大於一個象素時,顯示鼠標光標並退出程序
If Abs(oriqnX-currentX)>1 or Abs(orignY-currentY)>1Then
X=ShowCursor(True)
End
Endif
EndSub
4、檢測鼠標單擊在Visual Basic中,單擊事件是由“Click”觸發的。當屏幕保護程序運行時遇到單擊事件,則程序運行終止。代碼編輯如下:
Private Sub Form-Click()
X=ShowCursor(True)
End
EndSub
注意在結束之前先設光標的顯示為真,以免在程序結束後丟失光標。
5、檢測鍵盤上各按鍵的狀態Visual Basic中的鍵盤活動由KeyDown觸發。代碼與單擊事件的代碼一樣。
Private Sub Form-KeyDown(KeyCode As Integer,Shift As Integer)
X=ShowCursor(True)
End
EndSub
下面我們將設計一個簡單的屏幕保護程序,該程序運行時,從左至右顯示一張圖片,圖片從屏幕左邊出現,至屏幕右面消失,象拉幕一樣,且重不停復該過程。假設圖片文件名為PIC.BMP,並存放在Windows文件夾中。實際操作如下:
創建一新工程,在窗體中添加一圖片框和一個Timer控件。設置它們的屬性如下:
Form
BackColor=&H80000007&
BorderStyle=0 ’None
MaxButton=False
MinButton=False
Windowstate=2 ’Maximized
Timer
Intelval=5
PictureBoX
BackColor=&H80000007&
BorderStyle=0 ’None
AutoSize=Ture
輸入代碼如下:
’在窗體的聲明部分聲明ShowCursor函數。
Private Declare Function ShowCursor Lib“user32”(By Val bShow As Long) As Long
’在窗體上單擊鼠標時退出程序
Private Sub Form-Click()
X=ShowCursor(True)
End
EndSub
’在窗體上按下按鍵時退出程序
Private Sub Form-KeyDown(KeyCode As Integer,Shift As Integer) X=ShowCursor(True)
End
EndSub
’加載窗體時隱藏鼠標
Private Sub Form-Load()
Dim X As Long
X=ShowCursor(False)
Picture1.Visible=False
Picture1.PICTure=LoadPICTure(“C:\windows\PIC.BMP”)
Picture1.Left=-Picture1.Width
EndSub
’在窗體上移動鼠標時退出程序
Private Sub Form-MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
Static currentX,currentY As Single
Dim orignX,orignY As Single
’把當前的鼠標值賦給orignX和orignY
orignX=X
orignY=Y
’初始化currentX和currentY
If currentX=0 And currentY=0 Then
currentX=orignX
currentY=orignY
ExitSub
EndIf
If Abs(orignX-currentX)>1 Or Abs(orignY-currentY)>1
Then X=ShowCursor(True)
End
EndIf
EndSub
Private Sub Picture1-Click()
X=ShowCursor(True)
End
EndSub
Private Sub Picture1-KeyDown(KeyCode As Integer,Shift As Integer)
X=ShowCursor(True)
End
EndSub
Private Sub Picture1-MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)
Static Xlast,Ylast As Single
Dim Xnow,Ynow As Single
Xnow=X
Ynow=Y
If Xlast=0 And Ylast=0 Then
Xlast=Xnow
Ylast=Ynow
ExitSub
EndIf
If Abs(Xnow-Xlast)>1 Or Abs(Ynow-Ylast)>1 Then
X=ShowCursor(True)
End
EndIf
EndSub
Private Sub Timer1-Timer()
Picture1.Visible=True
Picture1.Top=(Form1.Height-Picture1.Height)/2
Picture1.Left=Picture1.Left+50
If Picture1.Left>Form1.Width Then
Picture1.Left=-Picture1.Width
EndIf
EndSub
將以上代碼編譯生成可執行文件,在保存文件對話窗中輸入文件名稱時把擴展名改為”SCR”,最後將生成的屏幕保護程序添加到Windows的系統下即可。