Download presentation
Presentation is loading. Please wait.
1
第 11 章 繪圖與多媒體
2
本章重點提要 11-1 Windows 繪圖初步 11-2 繪製基本幾何圖形 11-3 顯示圖片 11-4 視訊與音效
3
本章閱讀建議 繪圖與多媒體是電腦的重要應用之一, 本章要介紹 VB 在Windows 環境中繪圖, 以及播放音效與視訊的方法。
4
本章閱讀建議 11-1 Windows 繪圖初步:Windows 圖形介面的特點之一,是所有的程式共用同一個螢幕畫面, 為了讓各程式的視窗畫面能正常顯示, 在表單中繪圖需遵循一套特別的機制。本節先認識在表單中輸出圖形的方法, 及其運作原理。 11-2 繪製基本幾何圖形:本節說明如何用 .NET Framework提供的繪圖類別庫, 繪製線段、矩形、圓等基本幾何圖形, 以及繪圖時所需使用的畫筆 (Pen)、筆刷 (Brush) 工具的用法。
5
本章閱讀建議 11-3 顯示圖片:雖然第 4 章即用過 PictureBox 控制項顯示圖片, 但在本節要進一步介紹以 .NET Framework 提供的功能以更具彈性的方式顯示圖片或影像。 11-4 音效與視訊:本節要介紹以 VB 內建的方法來播放音效、以及使用 Windows Media Player 來播放音樂與視訊。
6
11-1 Windows 繪圖初步 在第 4 章曾介紹過使用 PictureBox 顯示圖片, 就是直接將其Image 屬性值設為由圖檔載入的點陣圖即可。但如果要自己『畫』出圖案, 就要多花一點工夫。使用 VB 在 Windows 中繪製圖形的步驟如下: 取得代表繪圖區域的 Graphics 物件。在 Windows 作業系統中, 每個應用程式可繪圖的區域, 限於自己的視窗( 表單) 範圍中。因此為了限制程式可以繪圖的範圍, .NET Framework 用Graphics 這個類別來代表可繪製的區域。
7
Windows 繪圖初步 使用 Graphics 物件的各種繪圖方法, 畫出所要的圖案。 釋放 Graphics 物件。
呼叫表單的 CreateGraphics() 方法, 就會傳回代表表單繪圖區域的 Graphics 物件, 之後即可使用 Graphics 類別內建的各種方法,在表單中繪圖。而在完成繪圖工作後, 一定要用 Graphics 物件呼叫其 Dispose() 將之釋放:
8
Windows 繪圖初步 如果是用表單中的控制項 (例如 TextBox1) 呼叫 CreateGraphics(),則會傳回代表控制項區域的 Graphics 物件, 並可用以在控制項中繪圖。 以下我們就以在表單中繪製矩形為例, 讓大家瞭解使用 Graphics物件的基本程序。
9
在表單中繪圖 在表單中繪製圖形。 建立新專案 Ch11-01, 並加入一個 控制項。
10
在表單中繪圖 建立 的 Click 事件程序, 並輸入如下的程式片段:
11
在表單中繪圖
12
在表單中繪圖 按[F5] 鍵執行程式, 按 鈕就會看到如下的輸出。
13
認識繪圖事件 前一個範例是在按鈕事件程序中進行繪圖工作, 但這種作法有個問題:一旦表單被其它應用程式的視窗蓋住, 再顯示表單時, 就會發現程式畫的矩形全部或一部份不見了。
14
認識繪圖事件 測試程式所繪圖形無法自動重畫的情形。 開啟 Ch11-01 專案, 並按 鍵執行之, 並按 鈕畫出矩形圖案。
15
認識繪圖事件 用 VB 視窗 ( 或用其它應用程式視窗) 蓋住矩形圖案全部或一部份。
16
認識繪圖事件 將 VB 視窗移開, 即會發現被蓋住的圖案, 都『消失』了。
17
認識繪圖事件 如圖所示, 當圖案的一部份被其它視窗蓋住再重新顯示時, 該部份的圖案就會不見;同理, 若將表單縮到最小, 再從工作列上開啟,也會發現矩形圖案消失。當然我們可再按一次 按鈕讓程式畫出圖案, 但這並不符合一般視窗程式的運作, 就像當記事本視窗縮到最小再恢復原狀時, 先前輸入的內容並不會消失。
18
認識繪圖事件 在 Windows 作業系統中, 每個應用程式都要自行負責繪製其視窗的內容, 在必要時 (包括第一次顯示視窗、及往後切換視窗時的顯示), 作業系統會觸發『繪圖事件』, 請應用程式『重畫』其視窗的內容。 例如當記事本視窗被縮到最小再恢復原狀時, 就會觸發記事本程式的繪圖事件, 所以記事本就會『重畫』視窗內容, 也就是重新顯示我們編輯中的文字內容。
19
認識繪圖事件
20
認識繪圖事件 在前一個範例程式中, 繪圖程式碼是放在按鈕事件程序中, 因此雖然在『視窗被蓋住、再顯示』的過程中, 會觸發程式的繪圖(Paint) 事件, 但我們未設計對應的事件程序來『重畫』矩形, 所以被蓋住的部分不會重新畫出, 結果就好像矩形圖案消失了。
21
使用 Paint 事件 當作業系統通知表單重畫時, 會觸發表單的 Paint 事件, 因此只要建立 Paint 事件程序, 在其中進行必要的繪圖工作, 就可讓表單在任何狀況下, 都能顯示其內容。
22
使用 Paint 事件 Paint 事件程序的第二個參數 e 有個 Graphics 屬性, 此屬性即是系統事先準備好的 Graphics 物件, 所以我們可直接用它來繪圖, 而不需另行建立 Graphics 物件, 使用完畢也不需呼叫 Dispose() 將其釋放 (因為 VB 會替我們在 Paint 事件程序結束後, 呼叫 Dispose()以釋放 Graphics 物件)。
23
使用 Paint 事件 建立 Paint 事件程序, 並在其中進行繪圖輸出。 建立新專案 Ch11-02。
24
使用 Paint 事件
25
使用 Paint 事件
26
使用 Paint 事件 在剛才產生的事件程序中, 輸入如下程式片段:
27
使用 Paint 事件 按[F5] 執行程式就會看到如下的輸出, 而且不論視窗被縮小或覆蓋, 重新顯示時都能正確出現圖形:
關於 Graphics 物件與 Paint 事件的基本用法就介紹到此, 下一節就來認識如何用 Graphics 物件呼叫各種方法來繪製圖案。
28
11-2 繪製基本幾何圖形 表單的繪圖座標 在 Windows 的圖形環境, 是用如下的座標系統來描述畫面上的像素 (Pixel):
29
表單的繪圖座標 對表單而言, 座標原點 (0,0) 就是視窗工作區 (Client Area)的左上角。工作區就是我們可以用程式輸出圖形的區域, 預設是指視窗內部, 不含視窗標題欄、邊框的區域:
30
表單的繪圖座標 因此用『g.DrawRectangle(Pens.Black, 10, 10, 60, 30)』畫的矩形, 其輸出位置及寬高的算法就是:
31
表單的繪圖座標 讀者或許會問可否指定負的座標值?答案是『可以』, 但超出工作區的圖案不會出現。Windows 作業系統為了保護各應用程式的視窗畫面, 所以就算程式在工作區外畫圖, 作業系統也不會輸出該部份的圖案 (否則在小畫家中可以將圖畫到記事本就很奇怪了)。例如:
32
表單的繪圖座標
33
使用畫筆 在呼叫 Graphics 物件的繪圖方法時, 除了繪圖的位置、大小等座標參數外, 還需傳遞一個畫筆物件為參數。透過畫筆可控制圖案線條的色彩、粗細、樣式等等。 為了方便我們在程式中繪圖, 在 Pens 類別下定義了一組粗細為 1 個像素的預設畫筆, 可直接取用。Pens 類別有多個以英文顏色為名稱的屬性, 這些屬性就代表該顏色的預設畫筆, VB 的Intellisense 功能會提示我們可用的預設畫筆:
34
使用畫筆
35
使用畫筆 預設畫筆的筆寬都是 1, 若想用較寬 (粗) 的畫筆, 則需自行建立畫筆物件, 建立的方式如下:
第 1 個參數『顏色』可使用第 4 章介紹過的 Color 類別所提供的顏色名稱;第 2 個參數則是以整數指定畫筆的寬度 (單位為像素),若省略此參數, 則畫筆寬度為 1。如:
36
使用畫筆 自行建立畫筆物件, 用以畫出不同粗細、顏色的矩形。
建立新專案 Ch11-03, 為方便看清楚圖形, 將表單的BackColor 屬性 ( 背景顏色) 設為 White ( 白色)。 建立表單的 Paint 事件程序, 並輸入如下程式:
37
使用畫筆
38
使用畫筆 按[F5] 鍵就會看到程式所畫出的圖案:
稍後示範圖形繪製時, 為簡明起見, 均以使用預設畫筆為例, 讀者自行撰寫程式時, 可視需要另建畫筆物件以畫出不同樣式的圖案。
39
線段 畫線是最基本的畫圖方式, 在數學課我們學到:給定兩點座標, 就能畫出一個線段。在表單中畫線也是如此, Graphics 物件的畫線方法為 DrawLine(), 除了第 1 個參數是畫筆物件外, 後面 4 個參數分別是起點和終點的 (x, y) 座標:
40
線段 在括號中列出一排座標參數, 有時會令人看得眼花遼亂, 因此 .NET Framework 提供了一個 Point 類別, 它可用來建立座標點物件, 例如:
41
線段 建立 Point 物件後, 就可用它當成 DrawLine() 的起點座標和終點座標參數, 如此就只需列出 3 個參數即可:
42
線段 用 DrawLine() 方法畫出打叉 (x) 圖案。
建立新專案 Ch11-04, 為方便看清楚圖形, 將表單的BackColor 屬性設為 White。 建立表單的 Paint 事件程序, 並輸入如下程式:
43
線段 按[F5] 鍵就會看到程式所畫出的 x 圖案:
44
矩形與橢圓 本章開頭已用過 DrawRectangle() 方法來畫矩形, 其語法如下:
如果指定的 width 和 height 的值相同, 所畫的就是正方形。
45
矩形與橢圓 和畫矩形類似的是畫橢圓形的方法 DrawEllipse(), 用此方法畫橢圓時, 提供的參數和 DrawRectangle() 相同, 但畫出的是矩形的『內接橢圓形』:
46
矩形與橢圓 如果要畫的是圓形, 只需將寬與高設為相同, 所畫出的就是該正方形的內接圓。
前面介紹的 Point 類別並不能用於 DrawR ectangle()、DrawEllipse() 的參數中, 不過另外有個 Rectangle 類別, 可用來建立代表矩形區域的物件, 並當成 DrawRectangle() 、DrawEllipse()的參數, 例如:
47
矩形與橢圓 練習使用畫矩形及畫橢圓的方法。
建立新專案 Ch11-05, 為方便看清楚圖形, 將表單的BackColor 屬性設為 White。 建立表單的 Paint 事件程序, 並輸入程式:
48
矩形與橢圓 按[F5] 鍵就會看到程式所畫出的矩形、橢圓形圖案:
49
使用筆刷 在前面繪圖的範例中, 我們畫的都是『空心』的矩形和橢圓, 亦即只是用線條畫出圖形的外框, 而圖形的內容則留空, 維持原來的背景顏色 (例如白色)。 如果要畫『實心』的圖案, 例如畫一個內部都是紅色的矩形 (而非僅有外框線是紅色), 就要利用與各個 DrawXXX() 方法對應的FillXXX() 方法:
50
使用筆刷 這組 FillXXX() 方法的用法和對應的 DrawXXX() 方法都類似, 主要的差別在於呼叫 FillXXX() 時, 第一個參數要改用筆刷 (Brush) 物件: 筆刷物件就代表要在矩形內容填滿的顏色和樣式, 以下先介紹預設筆刷的用法。
51
使用預設筆刷 和使用 Pens 類別的系統預設的畫筆一樣, 我們也可由 Brushes 類別直接取用系統預設筆刷, 其用法也是在 Brushes 後加上顏色名稱:
52
使用預設筆刷 使用預設筆刷畫出不同顏色、大小的圓形 (利用亂數函式 Rnd())。 建立新專案 Ch11-06。
我們要讓表單佈滿不同大小、顏色的圓形, 就連圓形的位置也非固定。為做到此效果, 我們可將表單工作區平均分割成100 格 (10x10), 在每一格中畫出一個圓形, 畫圓的筆刷顏色、以及圓的大小則用第 9 章介紹的函式 Rnd() 以亂數決定之。請建立表單的 Paint 事件程序, 並輸入下列內容:
53
使用預設筆刷
54
使用預設筆刷
55
使用預設筆刷
56
使用預設筆刷 在 Paint() 事件中是依據工作區大小來切割區域、繪製圓形, 但是當表單大小改變時, Windows 只會請表單重繪『因放大而多出來的區域』。因此我們要建立表單大小改變時所觸發的SizeChanged 事件程序, 並在其中呼叫『Me.Invalidate()』, 讓表單『全部重畫』:
57
使用預設筆刷 按[F5] 鍵執行程式, 會看到用非固定圓形所畫出的圖案, 縮放表單時, 圖形也會改變:
58
使用預設筆刷 在上面步驟 3 於 SizeChanged 事件程序呼叫『Me.Invalidate()』,讓表單全部重畫, 如此才能讓 Paint 事件程序, 重新畫出符合新的表單大小的圖案。這是因為當某個視窗需重畫時, Windows 為提高繪圖的效率, 只會讓程式重畫『有必要重畫的部份』。
59
使用預設筆刷 例如將表單放大, Windows 就只會讓程式重畫『因放大而多出來的區域』,表單中原有的內容則保持不變。在此情況下, 當我們放大範例程式的表單時, 將會很明顯看到『因放大而多出來的區域』中, 所畫出的圖案, 與表單原有的內容不太搭配:
60
使用預設筆刷
61
使用預設筆刷 像這種會隨著表單大小變化, 而調整圖案內容的情況, 都必須利用SizeChanged 事件程序, 來呼叫『Me.Invalidate()』, 讓表單『全部重畫』。
62
自訂條紋筆刷 透過 Brushes 取得的預設筆刷, 其樣式是將一種顏色塗滿指定的區域, 稱之為 SolidColorBrush, 除此之外我們也可建立以特定的條紋樣式填入指定區域的條紋筆刷HatchBrush。 要建立條紋筆刷可使用如下語法:
63
自訂條紋筆刷 兩者的差異是第 1 種用法不需指定背景顏色 (預設為黑色)。至於條紋樣式參數, 則是已事先定義在 HatchBrushStyle 類別中, 在 VB中輸入時就會提示可選用的樣式名稱:
64
自訂條紋筆刷
65
自訂條紋筆刷 各樣式名稱所對應的樣式如下圖所示:
66
自訂條紋筆刷 舉例來說, 想畫出以水平線 (Horizontal 樣式) 填滿的矩形, 可使用如下程式:
67
自訂條紋筆刷 使用條紋筆刷畫出圖案, 且圖案會隨表單同步縮放。
68
自訂條紋筆刷 建立新專案 Ch11-07。 我們要畫出使用不同筆刷的矩形和橢圓, 此處以使用Cross 和 Shingle 兩種樣式來示範, 請建立 Paint 事件程序, 並輸入如下程式:
69
自訂條紋筆刷
70
自訂條紋筆刷 和前一個範例類似, 由於表單縮放時, 只會重畫『有必要重畫的部份』。因此縮小表單時, 符合新大小的橢圓不會被顯示;放大表單時, 則較大的新橢圓只會被顯示一部份。因此同樣需建立 SizeChanged 事件程序, 並在其中讓表單全部重畫:
71
自訂條紋筆刷 按[F5] 鍵執行程式, 就會看到如下的效果。
72
11-3 顯示圖片 雖然使用 PictureBox 控制項可很方便在表單中顯示圖片 (只需將控制項加到表單中, 再設定其 Image 屬性即可), 但如果想在顯示圖片時加上做更多的效果及控制, 就要使用 Graphics 物件的DrawImage() 方法。
73
載入圖檔 要用 DrawImage() 方法顯示圖片時, 需先載入圖檔建立 Image 物件。最簡單的建立方式, 就是使用 Image 類別的 FromFile() 方法,也就是從磁碟中的圖檔建立物件: 例如要載入 "C:\VB2008\Ch11\Sample.jpg" 這個檔案就可寫成:
74
載入圖檔 但像讀取檔案這類操作, 在程式執行時, 可能會發生檔案找不到(例如路徑打錯、檔案不小心被刪除了...) 的狀況, 此時我們就需用Try/Catch 敘述來處理此種例外狀況。
75
使用 Try/Catch 敘述處理例外狀況 VB 雖然會替我們檢查程式的語法錯誤, 但它無法預測可能發生的執行時期錯誤 (Runtime Error)。 執行時期錯誤是指程式執行時遇到的意外狀況, 例如電腦記憶體不足、要讀取的檔案不存在等等, 在 VB 中, 將這些非預期的狀況稱為例外 (Exception), 當程式執行時發生例外, 程式將會立即中止執行。
76
使用 Try/Catch 敘述處理例外狀況 為了讓程式在例外發生時, 仍能順利執行, 或至少能告訴使用者,程式遇到什麼問題, 讓使用者不會覺得程式怎麼莫名其妙地結束,VB 提供 Try、Catch 這一組稱為例外處理的敘述。其用法如下 (必須一起使用):
77
使用 Try/Catch 敘述處理例外狀況 其結構有點類似於 If/Else 敘述:
78
使用 Try/Catch 敘述處理例外狀況 舉例來說, 用 Image.FromFile() 讀取圖檔, 如果檔案被搬移/刪除、或參數路徑打錯, 則程式執行時就會發生『找不到檔案』的例外。在 VB 中會看到如下的畫面:
79
使用 Try/Catch 敘述處理例外狀況
80
使用 Try/Catch 敘述處理例外狀況 但如果像下面用 Try 區塊包住讀取檔案的敘述, 在 Catch 區塊包住顯示訊息的區塊, 發生如上例外時, 程式就不會突然中止, 且能顯示訊息, 讓使用者瞭解發生什麼狀況:
81
使用 Try/Catch 敘述處理例外狀況 『MsgBox(ex.Message)』中的 ex 是在 Catch 敘述後的參數,它是程式發生例外時, VB 將例外的相關資訊包裝成的物件, 其Message 屬性內含簡單的例外訊息, 所以我們用 MsgBox() 函式將此訊息顯示出來。
82
顯示圖片 載入圖片後, 就可用 Graphics 物件的 DrawImage() 在表單中顯示圖片了, 其語法如下:
83
顯示圖片 其中的參數座標, 就是用來表示圖片的左上角, 要放在表單中的位置:
84
顯示圖片 例如以下程式片段就是將圖片從表單最左上角開始顯示:
85
顯示圖片 用 DrawImage() 方法在表單中顯示圖檔。 建立新專案 Ch11-08。
建立表單的 Paint 事件程序, 並輸入如下程式。
86
顯示圖片 按[F5] 鍵就會看到程式將圖檔內容顯示於表單之中:
87
圖片的縮放 由剛才的執行結果可以發現, 由於我們使用的圖片尺寸較表單大,所以使用預設的表單大小時, 無法顯示整個圖片內容, 還必須手動將表單拉大, 才能看到完整的圖片。 這是因為 DrawImage() 方法預設是使用 1:1 的原始尺寸來顯示影像, 所以當圖片很大時, 必須將表單調大, 才能完整顯示;反之, 如果圖片很小, 也只會在表單中顯示一小塊, 造成表單留白的情形。
88
圖片的縮放 在這種情況下, 我們就必須適度地縮放圖片, 讓它能完整顯示在表單之中。此時我們需在 DrawImage() 方法中再加兩個參數:
參數 width 和 height 分別代表圖片被顯示出來的寬與高, 若與圖片實際的尺寸不同, DrawImage() 方法就會自動縮放圖片, 以符合參數指定的大小。
89
圖片的縮放 利用這個寬、高的參數控制, 我們就可將前一個範例, 修改成程式自動依表單的大小 (可隨意調整), 將圖片整個顯示表單之中。
90
圖片的縮放 和先前的範例類似, 為了讓程式可隨表單大小縮放圖片, 在 Paint事件程序中, 需以工作區大小為顯示圖片的範圍、在表單的SizeChanged 事件程序, 呼叫 Me.Invalidate() 請表單重畫。
91
圖片的縮放 讓程式隨表單大小自動調整圖片尺寸。 建立新專案 Ch11-09。
在 Paint 事件程序中用 Image.FromFile() 載入圖片後, 需依『目前』的表單工作區大小, 自動縮放圖片。請建立表單 Paint事件程序, 並輸入如下程式:
92
圖片的縮放
93
圖片的縮放 建立表單的 SizeChanged 事件程序, 並呼叫 Me.Invalidate()方法觸發表單的 Paint 事件即可, 讓上面的程式會重新縮放圖片:
94
圖片的縮放 按[F5] 執行程式, 這次圖片會剛好顯示在表單之中, 調整表單大小時, 程式也都會即時反應, 以新的大小顯示圖片。
95
圖片的縮放 除了縮放圖片外, 若將 DrawImage() 方法的 width、height 參數設為負值, 還可產生左右相反 (width 為負值時)、上下顛倒 (height 為負值時)效果。不過要產生此種鏡射效果, 使用下一節介紹的 RotateFlip() 方法更為方便。
96
旋轉與鏡射 除了改變顯示的尺寸外, 我們也可使用 I m a g e 類別提供的RotateFlip() 方法, 對圖片做翻轉 (Flip)、或是旋轉 (Rotate) 的處理(亦可翻轉同時又旋轉)。 RotateFlip() 方法的參數只有一個, 就是指定旋轉、翻轉的方式, 此參數可使用內建的 RotateFlipType 列舉型別, 在 VB 編輯時, 就會列出其成員供我們使用:
97
旋轉與鏡射
98
旋轉與鏡射
99
旋轉與鏡射 實作一個秀圖程式, 每按一次滑鼠左鈕, 就讓圖片左轉 90 度;按滑鼠右鈕, 則讓圖片右轉 90 度。
建立新專案 Ch11-10。 前面的範例程式是在 Paint 事件程序中載入圖片, 這樣做有個缺點, 就是每次 Paint 事件被觸發時, 就要載入檔案一次;但實際上應該只載入一次即可。 所以這次我們建立表單的 Load 事件, 先在其中載入圖檔:
100
旋轉與鏡射
101
旋轉與鏡射 建立 Paint 事件程序, 並輸入如下程式:
和前面的例子一樣, 我們要隨表單大小改變來調整圖片顯示尺寸, 所以建立 SizeChanged 事件程序, 並輸入如下程式:
102
旋轉與鏡射 由於要讓滑鼠每按一次左、右鈕, 程式就將圖片左、右轉 90 度, 所以請建立 MouseClick 事件程序, 由 e.Button 判斷使用者按的按鈕後, 再用 Img 物件呼叫 RotateFilp() 方法, 並設定對應的旋轉參數:
103
旋轉與鏡射 按[F5] 執行程式, 每次用滑鼠在圖片上按一下左、右鈕,圖片就會左、右轉 90 度:
104
11-4 視訊與音效 介紹完繪圖後, 接著要介紹如何用 VB 程式播放視訊與音效, 其實播放視訊與音效主要是借助系統本身、或外部播放程式 (Media Player) 提供的功能來進行, 我們只要呼叫相關的方法、或使用控制項即可。
105
播放音效 在 V i s u a l B a s i c 程式中, 播放音效最簡便的方法, 就是透過My.Computer.Audio 物件呼叫 Play() 方法來播放 .wav 格式的聲音檔案, 其語法如下:
106
播放音效 playMode 參數可以是下列 3 種值:
若以 Background、BackgroundLoop 的方式在背景播放, 程式可隨時呼叫 My.Computer.Audio.Stop() 方法停止播放音效。 我們用一個簡單的範例來瞭解上述方法的差異。
107
播放音效 設計一個簡單的播放程式, 以測試 3 種播放模式。 建立新專案 Ch11-11, 並在表單中加入下列控制項:
108
播放音效 建立 按鈕事件程序, 輸入如下判斷及以適當模式播放音效的程式:
109
播放音效
110
播放音效 建立 按鈕事件程式, 並輸入可停止播放的程式:
建立 按鈕事件程式, 並輸入可停止播放的程式: 按[F5] 鍵執行程式, 並按 鈕以預設的"WaitToComplete" 模式播放音效, 由於程式會等待 "Test.wav" 播完才繼續執行, 所以可看到程式變更標題欄文字的動作會停頓約 3秒:
111
播放音效
112
播放系統音效 除了 Play() 外, My.Computer.Audio 下還有一個 PlaySystemSound() 方法, 可用以播放系統音效: 系統音效參數可使用下列值:
113
播放系統音效 上列這 5 個項目分別對應到系統音效中的 5 個程式事件, 例如 SystemSounds. Asterisk 這一項就是系統音效中的星號音效、 SystemSounds.Beep 則相當於預設嗶聲的音效:
114
播放系統音效
115
播放系統音效 要特別注意, 如果在系統音效中的程式事件, 其音效被設為無, 則用PlaySystemSound() 播放對應的項目時也不會有音效出現。 舉例來說, 程式事件中的『問題』, 其預設音效就是無, 所以呼叫"PlaySystemSound(SystemSound.Question)" 不會播放任何音效。
116
使用 MediaPlayer 控制項 使用 Play() 只能播放 WAV 格式的檔案, 若想播放 MP3、WMA 等格式的音樂檔, 或甚至播放 WMV 等視訊檔案, 則可利用現有的MediaPlayer 控制項。 MediaPlayer 控制項是 Windows Media Player 所提供的元件, 我們可以想成是以控制項的形式, 使用 Windows Media Player 的功能。但此控制項預設未列在 VB 的工具箱中, 因此我們要先加入它,才能在表單中使用此控制項。
117
使用 MediaPlayer 控制項 將 MediaPlayer 控制項加到 VB 工具箱 建立新專案 Ch11-12。
開啟工具箱窗格, 在 其中按滑鼠右鈕, 執 行『選擇項目』命 令:
118
使用 MediaPlayer 控制項 此時會出現選擇工具箱項目交談窗, 請切換到COM 元件頁次, 並選擇Windows Media Player 這一項。
119
使用 MediaPlayer 控制項
120
使用 MediaPlayer 控制項 按 鈕儲存專案, 稍後即可使用此控制項。
121
Windows Media Player 控制項的屬性
此控制項加入 VB 的名稱雖仍然是 Windows Media Player, 但其類別名稱為 AxWindowsMediaPlayer, 它有幾個重要屬性: uimode:此屬性可設定是否顯示控制面板。預設值為 "full", 此時控項項就彷彿一個迷你的 Windows Media Player, 但我們也可將此屬性設為 "none", 讓控制項只呈現播放區:
122
Windows Media Player 控制項的屬性
123
Windows Media Player 控制項的屬性
URL:指向要播放的影音內容之路徑。此屬性除了可設為各種影音檔路徑外, 亦可設為播放清單檔的路徑。 settings:settings 屬性其實是一組有關 AxWindowsMediaPlayer 控制項設定的集合:
124
Windows Media Player 控制項的屬性
autoStart:是否讓控制項『自動播放』, 預設值為 True, 表示只要已設妥 URL 屬性, 就會開始播放。 balance:設定左右聲道平衡, 預設值 0 表示兩邊相同。設為負值表示增強左聲道, -100 表示只有左聲道有聲音;正值表示增強右聲道, 100 表示只有右聲道有聲音。 rate:播放速率, 預設 1 表示正常速率, 設較大的值表示快速播放, 例如設為 2 表示以兩倍速播放;設為小於 1 的值則是慢速播放。
125
Windows Media Player 控制項的屬性
volume:音量, 可為 0 (無聲) 到 100。預設值為前一次開啟Media Player 時所用的音量。
126
Windows Media Player 控制項的屬性
此外, 我們可透過 AxWindowsMediaPlayer 控制項的 Ctlcontrols屬性, 呼叫下列方法做播放控制:
127
Windows Media Player 控制項的屬性
雖然 AxWindowsMediaPlayer 最偷懶的用法, 是直接將它拉曳到表單中, 只要設好 URL 屬性, 一切就交由使用者自行操作 (因為預設會顯示控制面板)。但以下我們還是來練習比較有彈性的做法, 就是用程式控制 AxWindowsMediaPlayer 控制項。
128
Windows Media Player 控制項的屬性
以程式控制 AxWindowsMediaPlayer 控制項, 建立簡易播放程式。 開啟剛才的空白專案 Ch11-12。 將 AxWindowsMediaPlayer 拉曳到表單中, 此外也加入 3個按鈕。
129
Windows Media Player 控制項的屬性
我們想讓 AxWindowsMediaPlayer 控制項不會自動播放,但其 Settings 屬性下的各設定值無法由屬性窗格設定, 所以需在程式中設定, 請建立表單的 Load 事件程序, 並輸入下列程式:
130
Windows Media Player 控制項的屬性
三個按鈕的 Click 事件程序中, 都只要呼叫 Ctlcontrols 屬性的方法即可。請建立三個按鈕的 Click 事件程序, 並輸入程式:
131
Windows Media Player 控制項的屬性
前面加入 、 鈕時, 都將其 Enabled 屬性設為 False, 因為我們希望只有正在播放影音時, 這兩個按鈕才能使用。這兩個按鈕的狀態, 可在 AxWindowsMediaPlayer 的StatusChange 事件程序中設定, 此事件會在控制項的狀態改變( 開始播放、被暫停、被停止等) 時被觸發, 而我們則可由控制項的 playState 屬性來得知目前的狀態, 並據以設定按鈕可否使用:
132
Windows Media Player 控制項的屬性
133
Windows Media Player 控制項的屬性
按[F5] 鍵會出現如下畫面, 再按 鈕即可播放預設的音樂內容。
134
Windows Media Player 控制項的屬性
Similar presentations