1 / 70

新觀念的 VB6 教本

新觀念的 VB6 教本. 第 16 章 螢幕保護程式. 螢幕保護程式,入門式 (1). 螢幕保護程式怎麼製作呢?首先讓我們來檢視 Windows 所提供的螢幕保護程式,請利用檔案總管搜尋 Windows 及 WindowsSystem 目錄底下的 . scr 檔案,以 Windows 98 為例,可以找到以下幾個螢幕保護程式:. 螢幕保護程式,入門式 (2). 螢幕保護程式,入門式 (3).

lynna
Télécharger la présentation

新觀念的 VB6 教本

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 新觀念的 VB6 教本 第 16 章 螢幕保護程式

  2. 螢幕保護程式,入門式 (1) • 螢幕保護程式怎麼製作呢?首先讓我們來檢視 Windows 所提供的螢幕保護程式,請利用檔案總管搜尋Windows及Windows\System 目錄底下的 .scr檔案,以 Windows 98為例,可以找到以下幾個螢幕保護程式:

  3. 螢幕保護程式,入門式 (2)

  4. 螢幕保護程式,入門式 (3) • 接著將任何一個 .scr 複製成為 test.exe 檔案,然後執行此一 test.exe 檔案,結果發現 test.exe 是可以執行的,這個試驗告訴我們 .scr 的螢幕保護程式其實就是一般的執行檔,只是它以 .scr 為副檔名,因此將來我們開發螢幕保護程式時,最後在編譯執行檔時(選取 VB 功能表的「檔案/製成XXX.exe」),也只要以 .scr為執行檔副檔名即可。

  5. 螢幕保護程式 第一版Step1-1 • 如下圖佈置控制元件,並設定好相關物件的屬性:

  6. 螢幕保護程式 第一版Step1-2

  7. 螢幕保護程式 第一版Step1-3 • 在以上的屬性中,比較值得的部分是表單的屬性,首先是將背景顏色(BackColor屬性)設定成黑色,接著還要將標題(Caption屬性)清成空白、邊框(BorderStyle 屬性)設定成 "0 - 沒有框線"、表單狀態(WindowsState 屬性)設定成 "2 - 最大化",將來執行時,才會出現「純黑佔滿螢幕」的表單。

  8. 螢幕保護程式 第一版Step 2 2. 在 Timer1_Timer 事件程序中撰寫以下程式: • 以上程式會促使 "歡迎使用大嘴巴的電腦!" 文字自右向左移動。 Private Sub Timer1_Timer() ' 左移文字寬度的 1/20Label1.Left = Label1.Left - Label1.Width / 20 If Label1.Left + Label1.Width < 0 Then ' 如果超過左邊界Label1.Left = Form1.ScaleWidth ' 移到右邊界End IfEnd Sub

  9. 螢幕保護程式 第一版Step 3 • 在 Form_Resize 事件程序中撰寫以下程式: • 以上程式的目的是當表單放到最大時,將 Label1 的位置設定於右邊界的中央位置。 Private Sub Form_Resize() ' 將文字的位置設定於表單右邊界的中央位置Label1.Left = Form1.ScaleWidth Label1.Top = (Form1.ScaleHeight - Label1.Height) / 2End Sub

  10. 螢幕保護程式 第一版Step 4 • 在 Form_KeyDown 事件程序中撰寫以下程式: • 當程式偵測到使用者按下鍵盤時,即呼叫 Unload Me 載出表單。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Unload Me ' 載出表單End Sub

  11. 螢幕保護程式 第一版Step 5 • 接著執行程式,測試看看,結果螢幕會被黑色背景的表單所佔滿,而 "歡迎使用大嘴巴的電腦!" 的文字會自左向右移動。測試之後,結束程式的方法是按下鍵盤的任意按鍵。 • 就一般螢幕保護程式的習慣來說,除了按鍵會終止螢幕保護程式之外,移動滑鼠也要能夠終止螢幕保護程式,因此接下來讓我們繼續加入滑鼠移動的偵測程式。

  12. 螢幕保護程式 第一版Step 6 • 在 Form_MouseMove 事件程序中撰寫以下程式: • 以上程式在偵測到滑鼠移動時,也一樣呼叫 Unload Me 載出表單結束程式。 Dim X0 As Single, Y0 As Single ' 用來記錄滑鼠的位置Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' 第一次發生滑鼠事件時,將位置記錄於 (X0,Y0) If X0 = 0 And Y0 = 0 Then X0 = X: Y0 = Y ' 如果滑鼠位置改變,就載出表單If X <> X0 Or Y <> Y0 Then Unload MeEnd Sub

  13. 製作成 saver01.scr (1) • 剛才我們所完成的螢幕保護程式只有 VB的工作環境底下進行測試,如何讓它真正地變成 Windows 的螢幕保護程式呢? • 首先要選取 VB 功能表的「檔案/製成XXX.exe」,而在接下來所出現的「製成執行檔」交談窗中,應將執行檔的副檔名由 .exe更改為 .scr,並且將路徑設定於Windows的所在目錄 。

  14. 製作成 saver01.scr (2) • 如下圖:

  15. 測試saver01.scr(1) • 完成程式的編譯之後,在 Windows 的桌面上按下滑鼠右鈕,待出現快顯功能表時,選取「內容」命令,接著選取「螢幕保護裝置」頁籤,然後拉下「螢幕保護裝置」,過程如下圖,結果可以在其中找到 saver01,這就是我們所製作出來的螢幕保護程式。

  16. 測試saver01.scr(2)

  17. 測試saver01.scr(3) • 選取 saver01之後,螢幕保護程式就會開始執行,這表示我們已經踏出了第一步。接著移動滑鼠結束 saver01 程式,再讓我們進行以下的測試:

  18. 測試saver01.scr -- 測試一 • 如上圖,設定「等待」時間,然後按下「套用」鈕,接下來靜候一分鐘,不要操作鍵盤與滑鼠,結果一分鐘之後 Windows 會啟動 saver01螢幕保護程式。

  19. 測試saver01.scr -- 測試二 • 如上圖,按下「預覽」鈕,結果 saver01螢幕保護程式也會被啟動,進入螢幕保護程式的預覽狀態。

  20. 測試saver01.scr -- 測試三(1) • 如上圖,按下「設定值」鈕,結果 saver01 螢幕保護程式也會被啟動,這一點好像不太對,因為標準的螢幕保護程式此時會出現設定的畫面。

  21. 測試saver01.scr -- 測試三(2) • 如果所選取的螢幕保護程式是 "Flying Windows",則按下「設定值」鈕時,會出現以下交談窗,輸入螢幕保護程式的設定值:

  22. 測試saver01.scr -- 測試四 • 如上圖,先核取「密碼保護」,然後按下「變更」鈕,結果 saver01 螢幕保護程式也會被啟動,而不像標準的螢幕保護程式一樣會出現密碼設定畫面。

  23. 螢幕保護程式 第二版 (1) • 經過以上的測試之後,我們知道 saver01應該改善的地方是當使用按下「設定值」及「密碼保護 -> 變更」時,不要執行螢幕保護程式。如何知道使用者是按下「設定值」及「密碼保護 -> 變更」呢?

  24. 螢幕保護程式 第二版 (2) • 其實當 Windows 啟動螢幕保護程式時,會在 .scr 執行檔之後附帶可以判別被啟動方式的參數,如下: • 如果參數的兩個字元等於 "/a" 或 "/A" • 如果參數的兩個字元等於 "/c" 或 "/C" • 如果參數的兩個字元等於 "/p" 或 "/P" • 其他

  25. 螢幕保護程式 第二版 (3) • 如果參數的兩個字元等於“/a”或“/A”:表示螢幕保護程式是因為使用者按下「密碼保護 -> 變更」而被啟動的。 • 如果參數的兩個字元等於 "/c" 或 "/C":表示螢幕保護程式是因為使用者按下「設定值」而被啟動的。 • 如果參數的兩個字元等於 "/p" 或 "/P":表示螢幕保護程式是因為第一次被選取而被啟動的。 • 其他:表示螢幕保護程式是因為使用者按下「預覽」或等待時間已到而被啟動的。

  26. 改良程式 -- Part I (1) • 因此為了改變螢幕保護程式第一版的缺點,筆者在 Form_Load 事件程序中(會在表單被載入時被執行)撰寫以下程式:

  27. 改良程式 -- Part I (2) Private Sub Form_Load() If UCase(Left(Command, 2)) = "/A" Then ' 密碼設定MsgBox "此一螢幕保護程式未提供「密碼保護」功能!"Unload Me End If If UCase(Left(Command, 2)) = "/C" Then ' 設定值MsgBox "此一螢幕保護程式沒有「設定值」!"Unload Me End If If UCase(Left(Command, 2)) = "/P" Then ' 小螢幕Unload Me End If…End Sub

  28. 改良程式 -- Part II Private Sub Form_Load() If UCase(Left(Command, 2)) = "/A" Then ' 密碼設定MsgBox "此一螢幕保護程式未提供「密碼保護」功能!"Unload Me End If If UCase(Left(Command, 2)) = "/C" Then ' 設定值MsgBox "此一螢幕保護程式沒有「設定值」!"Unload Me End If If UCase(Left(Command, 2)) = "/P" Then ' 小螢幕Unload Me End If If App.PrevInstance Then ' 已經在執行中Unload Me End IfEnd Sub • 在 Form_Load 件程序的最後面增加了以下敘述:

  29. 16-2 螢幕保護程式,變化式

  30. 跳躍的直線 -- saver2a.vbp • 此一螢幕保護程式在表單上描繪一寬度等於 5 的直線,而每次直線描繪的位置及長度都是不固定的,因此感覺就像是「跳躍的直線」。

  31. 跳躍的直線 –Step 0~3 0. 以上一節的 saver02.vbp 專案為基礎。 • 佈置 Line 控制元件(工具箱的 ),並設定好以下屬性: • 刪除 Label1 控制元件。 • 刪除 Form_Resize 事件程序。

  32. 跳躍的直線 -- Step 4 4. 更改 Timer1_Timer 事件程序的內容: Private Sub Timer1_Timer() Line1.BorderColor = QBColor(Int(16 * Rnd)) Line1.X1 = Int(Form1.ScaleWidth * Rnd) Line1.Y1 = Int(Form1.ScaleHeight * Rnd) Line1.X2 = Int(Form1.ScaleWidth * Rnd) Line1.Y2 = Int(Form1.ScaleHeight * Rnd)End Sub

  33. 反彈球 -- saver2b.vbp • 此一螢幕保護程式會移動圓形圖示,而只要此一圖示撞到表單邊框時,即會反彈。

  34. 反彈球 -- Step 0~2 0.以上一節的 saver02.vbp 專案為基礎。 1.佈置 Image 控制元件,並且將其 Picture 屬性設定成本書 ch16目錄底下的 moon05.ico 圖示檔。 2.刪除 Label1 控制元件及 Form_Resize 事件程序。

  35. 反彈球 -- Step 3-1 • 更改 Timer1_Timer 事件程序的內容: Dim X0 As Single, Y0 As Single ' 這是既有的敘述Dim Motion As Integer ' 這是新增的敘述Private Sub Timer1_Timer() Dim offset As Integer If Motion = 0 Then Motion = 3 offset = Image1.Width \ 10

  36. 反彈球 -- Step 3-2 Select Case Motion Case 1 ' 向左上角移動Image1.Move Image1.Left - offset, Image1.Top - offset If Image1.Left <= 0 Then Motion = 2 ElseIf Image1.Top <= 0 Then Motion = 4 End If Case 2 ' 向右上角移動Image1.Move Image1.Left + offset, Image1.Top - offset If Image1.Left >= (Form1.ScaleWidth - Image1.Width) Then Motion = 1 ElseIf Image1.Top <= 0 Then Motion = 3 End If

  37. 反彈球 -- Step 3-3 Case 3 ' 向右下角移動Image1.Move Image1.Left + offset, Image1.Top + offset If Image1.Left >= (Form1.ScaleWidth - Image1.Width) Then Motion = 4 ElseIf Image1.Top >= (Form1.ScaleHeight - Image1.Height) Then Motion = 2 End If Case 4 ' 向左下角移動Image1.Move Image1.Left - offset, Image1.Top + offset If Image1.Left <= 0 Then Motion = 3 ElseIf Image1.Top >= (Form1.ScaleHeight - Image1.Height) Then Motion = 1 End If End SelectEnd Sub

  38. 月有陰晴圓缺 -- saver2c.vbp • 此一螢幕保護程式除了圖示撞到表單邊框會反彈之外,圖示也會產生月有陰晴圓缺的變化。

  39. 月有陰晴圓缺 -- Step 0~1-1 0. 以上一節的 saver02.vbp 專案為基礎。 1. 佈置 Image2 控制元件陣列,並設定好 Picture 屬性,此外 Image2 控制元件陣列每一個元素的 Visible 屬性都設定為 False 。

  40. 月有陰晴圓缺 -- Step 1-2

  41. 月有陰晴圓缺 -- Step 2-1 2. 修改 Timer1_Timer 事件程序的程式: Dim X0 As Single, Y0 As SingleDim Motion As IntegerDim Index As Integer ' 新增Private Sub Timer1_Timer() Set Image1.Picture = Image2(Index).Picture ' 新增 Dim offset As Integer If Motion = 0 Then Motion = 3 offset = Image1.Width \ 10 Select Case Motion

  42. 月有陰晴圓缺 -- Step 2~2 Case 1 ' 向左上角移動Image1.Move Image1.Left - offset, Image1.Top - offset If Image1.Left <= 0 Then Motion = 2 ElseIf Image1.Top <= 0 Then Motion = 4 End IfCase 2 ' 向右上角移動Image1.Move Image1.Left + offset, Image1.Top - offset If Image1.Left >= (Form1.ScaleWidth - Image1.Width) Then Motion = 1 ElseIf Image1.Top <= 0 Then Motion = 3 End If

  43. 月有陰晴圓缺 -- Step 2~3 Case 3 ' 向右下角移動Image1.Move Image1.Left + offset, Image1.Top + offset If Image1.Left >= (Form1.ScaleWidth - Image1.Width) Then Motion = 4 ElseIf Image1.Top >= (Form1.ScaleHeight - Image1.Height) Then Motion = 2 End If

  44. 月有陰晴圓缺 -- Step 2~4 Case 4 ' 向左下角移動Image1.Move Image1.Left - offset, Image1.Top + offset If Image1.Left <= 0 Then Motion = 3 ElseIf Image1.Top >= (Form1.ScaleHeight - Image1.Height) Then Motion = 1 End If End Select Index = Index + 1 ' 新增If Index = 8 Then Index = 0 ' 新增End Sub

  45. 砲火交織 -- saver2d.vbp • 此一螢幕保護程式會在表單上連續描繪寬度等於 5 的直線,每次的描繪總是接續上一直線,而直線的顏色及長度都是不固定的,因此感覺就像是「砲火交織」。

  46. 砲火交織 – Step 0~2 0.以上一節的 saver02.vbp 專案為基礎。 1.刪除 Label1 控制元件及 Form_Resize 事件程序。 2.更改 Timer1_Timer 事件程序的程式: Private Sub Timer1_Timer() Form1.DrawWidth = 5 X = Int(Form1.ScaleWidth * Rnd) Y = Int(Form1.ScaleHeight * Rnd) Line -(X, Y), RGB(Rnd * 255, Rnd * 255, Rnd * 255)End Sub

  47. 星火點點 -- saver2e.vbp

  48. 星火點點 – Step 0~2 0. 以上一節的 saver02.vbp 專案為基礎。 1. 刪除 Label1 控制元件及 Form_Resize 事件程序。 2. 更改 Timer1_Timer 事件程序的程式: Private Sub Timer1_Timer() Form1.DrawWidth = 5 X = Rnd * Form1.ScaleWidth Y = Rnd * Form1.ScaleHeight PSet (X, Y), RGB(Rnd * 255, Rnd * 255, Rnd * 255)End Sub

  49. 陣陣漣漪 -- saver2f.vbp

  50. 陣陣漣漪 – Step 0~2 0.以上一節的 saver02.vbp 專案為基礎。 1.刪除 Label1 控制元件及 Form_Resize 事件程序。 2.更改 Timer1_Timer 事件程序的程式: Private Sub Timer1_Timer() Form1.DrawStyle = 1 ' 破折線X = Form1.ScaleWidth / 2 Y = Form1.ScaleHeight / 2 R = Y * Rnd Circle (X, Y), R, RGB(Rnd * 255, Rnd * 255, Rnd * 255)End Sub

More Related