Delphi程序的設(shè)計(jì)及實(shí)驗(yàn)指導(dǎo)第1章 多媒體編程_第1頁
Delphi程序的設(shè)計(jì)及實(shí)驗(yàn)指導(dǎo)第1章 多媒體編程_第2頁
Delphi程序的設(shè)計(jì)及實(shí)驗(yàn)指導(dǎo)第1章 多媒體編程_第3頁
Delphi程序的設(shè)計(jì)及實(shí)驗(yàn)指導(dǎo)第1章 多媒體編程_第4頁
Delphi程序的設(shè)計(jì)及實(shí)驗(yàn)指導(dǎo)第1章 多媒體編程_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第10章 多媒體編程導(dǎo)讀10.1 動(dòng)畫組件tanimate10.2 媒體播放器組件tmediaplayer10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì)10.4 簡單的cd播放器的制作小結(jié)習(xí)題導(dǎo)讀多媒體技術(shù)是近年來計(jì)算機(jī)技術(shù)的一個(gè)重要的發(fā)展方向,采用多媒體技術(shù)制作的軟件產(chǎn)品已經(jīng)越來越多地走進(jìn)生活、學(xué)習(xí)、娛樂之中。delphi 8 for .net作為一種快速開發(fā)工具,不僅在開發(fā)數(shù)據(jù)庫和網(wǎng)絡(luò)應(yīng)用程序中令人稱道,而且delphi 8 for .net為開發(fā)人員提供了功能全面的多媒體開發(fā)組件,這些組件使得利用delphi開發(fā)多媒體應(yīng)用程序非常方便容易。本章主要介紹利用delphi 8 for .net中的tan

2、imate組件和tmediaplayer組件開發(fā)多媒體應(yīng)用程序的方法。學(xué)習(xí)目標(biāo):掌握動(dòng)畫組件tanimate的使用方法掌握媒體播放器組件tmediaplayer的使用方法10.1 10.1 動(dòng)畫組件動(dòng)畫組件tanimatetanimate1用途用途 動(dòng)畫組件tanimate 位于組件面板的win32選項(xiàng)卡上,如圖10-1所示,該組件專門用于播放動(dòng)畫應(yīng)用程序。通常,在應(yīng)用程序中需要顯示動(dòng)態(tài)圖像,但不需要聲音設(shè)備的時(shí)候,可以使用tanimate組件。tanimate組件能夠播放的avi(audio video interlaced)剪輯可以是無聲的avi文件、使用rle(runtime lengt

3、h encoding)壓縮方式壓縮過的avi文件,avi剪輯通常是一個(gè)位圖圖像的序列。10.1 10.1 動(dòng)畫組件動(dòng)畫組件tanimatetanimate2主要屬性主要屬性 (1)active屬性:該屬性用來指定是否激活選中的avi剪輯。當(dāng)該屬性值設(shè)置為true時(shí),可以讓選中的avi剪輯按照用repetition、startframe和stopframe屬性設(shè)置的播放方式,在tanimate窗口中自動(dòng)播放。該屬性值設(shè)置為false時(shí),選中的avi剪輯不能播放,或停止正在播放的avi剪輯。注意:在avi剪輯被激活之前必須確保avi剪輯是打開的。 (2)center屬性:該屬性用來決定是否將avi

4、剪輯放在tanimate區(qū)域的中間位置。10.1 10.1 動(dòng)畫組件動(dòng)畫組件tanimatetanimate (3)filename屬性:該屬性用來指定avi剪輯文件的文件名。需要注意的是,該文件包含的avi剪輯必須是無聲的。此外,在指定播放avi文件的時(shí)候要保證commonavi屬性值為avinone。 (4)framecount屬性:該屬性為只讀屬性,其屬性值記錄了所選中的avi剪輯中包含的位圖圖像序列的總幀數(shù)。通過讀取該屬性,可以選擇播放avi剪輯中的全部圖像幀,或其中指定的一部分圖像幀。 (5)frameheight和framewidth屬性:這兩個(gè)屬性也是只讀的,它們記錄了選中的av

5、i剪輯中包含的位圖圖像所占矩形區(qū)域的高度和寬度。當(dāng)tanimate組件的autosize屬性值設(shè)為true時(shí),tanimate組件的大小會(huì)自動(dòng)和圖像的大小進(jìn)行匹配。 (6)open屬性:該屬性指出avi剪輯是否已經(jīng)調(diào)入內(nèi)存,并準(zhǔn)備播放。當(dāng)指定了需要播放的avi剪輯后,open屬性為true,如果這時(shí)active屬性為false,那么avi剪輯會(huì)自動(dòng)顯示startframe指定的圖像幀。若open屬性設(shè)置為false,tanimate組件會(huì)將所選取的avi剪輯從內(nèi)存中釋放,并且使tanimate組件區(qū)域內(nèi)沒有圖像10.1 10.1 動(dòng)畫組件動(dòng)畫組件tanimatetanimate (7)repe

6、tition屬性:該屬性指定重復(fù)播放avi剪輯的次數(shù)。當(dāng)active屬性設(shè)置為true時(shí),avi剪輯開始播放,當(dāng)播放次數(shù)達(dá)到由repetition屬性指定的數(shù)值時(shí),avi剪輯停止播放,同時(shí)active屬性設(shè)置為false。當(dāng)repetition屬性設(shè)置為0時(shí),表示不指定重復(fù)播放的次數(shù)。這時(shí),可以通過設(shè)置active屬性值和使用stop方法來停止avi剪輯的播放。 (8)startframe屬性和stopframe屬性:這兩個(gè)屬性用來指定avi剪輯播放的起始幀和結(jié)束幀的序號(hào)。當(dāng)設(shè)置active屬性為true時(shí),avi剪輯將按照repetition數(shù)字指定的播放次數(shù)重復(fù)播放startframe和s

7、topframe指定區(qū)間的圖像序列。 (9)timer屬性:該屬性用來指示在播放avi剪輯的時(shí)候是否使用定時(shí)器。如果設(shè)置為使用定時(shí)器,那么tanimate組件可以響應(yīng)定時(shí)器發(fā)出的消息。該屬性主要用來實(shí)現(xiàn)多個(gè)多媒體組件之間的同步。10.1 10.1 動(dòng)畫組件動(dòng)畫組件tanimatetanimate【例10-1】使用tanimate組件設(shè)計(jì)一個(gè)簡單的動(dòng)畫播放程序。創(chuàng)建一個(gè)工程prjtanimate.dpr,選擇組件面板的win32選項(xiàng)卡,從中選擇tanimate組件將其拖動(dòng)到默認(rèn)窗體中。這時(shí),可以看到tanimate組件表現(xiàn)為一個(gè)空白區(qū)域,這就是用來顯示動(dòng)畫圖像的區(qū)域。將tanimate組件的au

8、tosize屬性設(shè)置為true,接著選擇所要播放的avi剪輯。在示例程序目錄下存在一個(gè)名為clock.avi的avi文件,設(shè)置tanimate組件的filename屬性clock.avi,然后設(shè)置active屬性為true,可以看到動(dòng)畫在窗口中已經(jīng)開始播放,如圖10-2所示。10.2 10.2 媒體播放器組件媒體播放器組件tmediaplayertmediaplayer1用途用途 delphi提供了一個(gè)tmediaplayer組件,使得程序員可以使用它快速開發(fā)音頻或者視頻播放器。tmediaplayer組件提供了一個(gè)mci(media control interface,媒體控制接口),它可以

9、輕松地在程序中加入多媒體功能。完整的mci驅(qū)動(dòng)程序能夠支持*.wav、*.dat、*.midi和*.cda等格式的文件。 tmediaplayer組件位于組件面板的system選項(xiàng)卡上,如圖10-3所示。將tmediaplayer組件添加到當(dāng)前活動(dòng)的窗體中,如圖10-4所示。tmediaplayer組件總共有9個(gè)按鈕:播放(btplay)、暫停(btpause)、停止(btstop)、下一音軌(btnext)、上一音軌(btprev)、快進(jìn)(btstep)、快退(btback)、錄制(btrecord)和彈出cd(bteject)10.2 10.2 媒體播放器組件媒體播放器組件tmediapl

10、ayertmediaplayer2主要屬性主要屬性 (1)autoenable屬性:該屬性用來設(shè)置tmediaplayer組件的控制按鈕在運(yùn)行過程中是否可自動(dòng)變?yōu)榭捎没蛘卟豢捎谩H绻渲禐閠rue,則媒體播放器可以自動(dòng)將控制按鈕變?yōu)榭捎没虿豢捎?。媒體播放器根據(jù)mode屬性返回的設(shè)備狀態(tài)以及devicetype屬性設(shè)置的設(shè)備類型來確定哪個(gè)按鈕可用或不可用。 (2)enabledbuttons屬性:該屬性用來設(shè)置控制按鈕的可用或不可用狀態(tài)。當(dāng)autoenable屬性設(shè)為true時(shí),enabledbuttons屬性無效。只有當(dāng)autoenable屬性為false時(shí),媒體播放器的控制按鈕才可通過ena

11、bledbuttons屬性來設(shè)置為可用或不可用。 (3)autoopen屬性:該屬性用來設(shè)置應(yīng)用程序運(yùn)行時(shí),tmediaplayer組件是否自動(dòng)打開,缺省值為false。如果該屬性的值為true,則媒體播放器自動(dòng)打開devicetype屬性所指定的多媒體設(shè)備;如果該屬性的值為false,則必須調(diào)用open方法才能打開設(shè)備。如果在打開設(shè)備時(shí)出錯(cuò),將觸發(fā)emcideviceerror類型的異常,該異常包含的出錯(cuò)消息保存在errormessage屬性中。10.2 10.2 媒體播放器組件媒體播放器組件tmediaplayertmediaplayer (4)autorewind屬性:該屬性用來設(shè)置媒體

12、播放器是否具有自動(dòng)反復(fù)播放或錄音功能。如果該屬性的值為true,當(dāng)需要播放和錄音時(shí),將自動(dòng)返回到起始位置;如果為false,只有單擊prev按鈕或在程序中調(diào)用previous方法時(shí),才能返回到起始位置。 (5)coloredbuttons屬性:該屬性用來設(shè)置控制按鈕是黑白顯示還是彩色顯示,默認(rèn)全部按鈕均為彩色顯示。 (6)devicetype屬性:該屬性用來指定使用open方法要打開多媒體設(shè)備的類型。它的默認(rèn)值為dtautoselect,表示tmediaplayer組件會(huì)根據(jù)filename所指定的文件擴(kuò)展名來決定設(shè)備類型。如果播放文件擴(kuò)展名沒有相關(guān)的設(shè)備類型,需要用戶指定設(shè)備類型,而不能簡單

13、地使用dtautoselect。如果開發(fā)的播放器是cd播放器,則在設(shè)計(jì)階段就設(shè)置該屬性為dtcdaudio,它表示媒體載體為cd。 (7)display屬性:該屬性用來為多媒體設(shè)備指定一個(gè)窗體組件用于顯示輸出,該屬性的默認(rèn)值為nil,表示該設(shè)備將自己創(chuàng)建窗體顯示輸出。 (8)displayrect屬性:該屬性用來指定display屬性指定的窗體中的一塊矩形面積,用于顯示多媒體設(shè)備的輸出。10.2 10.2 媒體播放器組件媒體播放器組件tmediaplayertmediaplayer (8)displayrect屬性:該屬性用來指定display屬性指定的窗體中的一塊矩形面積,用于顯示多媒體設(shè)備

14、的輸出。 (9)mode屬性:該屬性用來說明被打開的設(shè)備文件的狀態(tài)。 (10)filename屬性:該屬性用于存儲(chǔ)要打開的文件名。 (11)startpos屬性:該屬性用來指定當(dāng)前要播放的媒體的起始位置。 (12)endpos屬性:該屬性用來指定當(dāng)前要播放的媒體的終止位置。 (13)position屬性:該用來指定媒體的當(dāng)前播放位置。 (14)length屬性:該屬性用于設(shè)定媒體的文件長度。 和ta開發(fā)簡單的多媒體應(yīng)用程序。10.2 10.2 媒體播放器組件媒體播放器組件tmediaplayertmediaplayer【例10-2】使用tmediaplayer組件編寫一個(gè)簡單的avi文件播放器

15、程序。與介紹 tanimate組件時(shí)提到的avi文件播放器不一樣的是:這個(gè)播放器可以播放有聲音輸出的avi文件。 新建一個(gè)工程prjmediaplayer.dpr,選擇組件面板的standard選項(xiàng)卡,從中選擇tpanel組件添加到窗體中。在組件面板的system選項(xiàng)卡中選擇tmediaplayer組件添加到窗體中。設(shè)置tmediaplayer組件display屬性為tpanel組件,設(shè)置filename屬性為示例程序目錄下的clock.avi文件,然后將autoopen屬性設(shè)置為true。運(yùn)行程序,可以在窗體中看到媒體播放器的按鈕,單擊 按鈕,這時(shí)可以看到在tpanel組件中開始播放動(dòng)畫,如

16、圖10-5所示。如果計(jì)算機(jī)支持音頻輸出,那么可以聽到隨畫面播放的聲音。10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì)為了更好地理解tanimate組件的屬性、方法和事件,這一節(jié)創(chuàng)建一個(gè)簡單的動(dòng)畫播放程序。通過實(shí)例來更好地掌握tanimate組件的應(yīng)用以及多媒體程序的設(shè)計(jì)思路。10.3.1 界面設(shè)計(jì)界面設(shè)計(jì)新建一個(gè)工程prjtanimate.dpr,如圖10-6所示設(shè)計(jì)動(dòng)畫播放程序的界面。窗體及其組件屬性的設(shè)置如表10-2所示。10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì)10.3.2 代碼編寫代碼編寫 1定義存放起始幀、結(jié)束幀、循環(huán)次數(shù)和總幀數(shù)的變量定義存放起始幀、結(jié)束幀、循環(huán)次數(shù)和總幀數(shù)的變量 var form1:

17、 tform1; startframe,stopframe,repeatframe,sumframe:integer;10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì) 2tanimate1組件的組件的onopen事件處理程序代碼事件處理程序代碼 procedure tform1.animate1open(sender: tobject); begin showmessage(tanimaet組件觸發(fā)onopen事件,初始化變量!); (*初始化變量*) startframe:=animate1.startframe; stopframe:=animate1.stopframe; repeatframe:=a

18、nimate1.repetition; sumframe:=animate1.framecount; estartframe.text:=inttostr(startframe); estopframe.text:=inttostr(stopframe); esumframe.text:=inttostr(sumframe); erepeatframe.text:=inttostr(repeatframe); end;10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì)3“開始播放開始播放”按鈕的按鈕的onclick事件處理程序代碼事件處理程序代碼 procedure tform1.playclick(send

19、er: tobject); begin startframe:=strtoint(estartframe.text); stopframe:=strtoint(estopframe.text); repeatframe:=strtoint(erepeatframe.text); (*驗(yàn)證動(dòng)畫屬性驗(yàn)證編輯框的數(shù)據(jù)合法性*)10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì)if (startframestopframe) or(stopframesumframe) then begin /輸入范圍錯(cuò)誤 showmessage(輸入幀的范圍錯(cuò)誤,所有設(shè)置復(fù)位!); animate1.startframe:=1;an

20、imate1.stopframe:=animate1.framecount; animate1.repetition:=0; estartframe.text:=1;estopframe.text:=inttostr(animate1.framecount); erepeatframe.text:=0; endelse begin (*設(shè)置組件的enabled屬性*) play.enabled:=false; stop.enabled:=true; estartframe.enabled:=false; estopframe.enabled:=false; erepeatframe.enabl

21、ed:=false; (*設(shè)置tanimate組件的屬性,然后進(jìn)行播放*) animate1.startframe:=startframe; animate1.stopframe:=stopframe; animate1.repetition:=repeatframe; animate1.active:=true; /進(jìn)入播放狀態(tài) end;end;10.3 簡單的動(dòng)畫播放程序的設(shè)計(jì)4“停止播放停止播放”按鈕的按鈕的onclick事件處理程序代碼事件處理程序代碼procedure tform1.stopclick(sender: tobject);begin(*停止播放*) animate1.s

22、top; play.enabled:=true; /“開始播放”按鈕可用 stop.enabled:=false;(*設(shè)置文本框?yàn)榭捎?) estartframe.enabled:=true; estopframe.enabled:=true; erepeatframe.enabled:=true;end;10.4 簡單的cd播放器的制作10.4.1 界面設(shè)計(jì)界面設(shè)計(jì)新建一個(gè)工程prjpcd.dpr,設(shè)計(jì)如圖10-8所示的cd播放器的界面,窗體及其組件屬性的設(shè)置如表10-3所示。10.4 簡單的cd播放器的制作10.4.2 代碼編寫代碼編寫1初始化程序初始化程序 procedure tform

23、1.formcreate(sender: tobject); begin with mediaplayer1 do begin visible:=true; devicetype:=dtcdaudio; /設(shè)置多媒體設(shè)備的類型 open; /通過open方法打開cd播放設(shè)備 end; end;10.4 簡單的cd播放器的制作2按鈕的按鈕的onclick事件處理程序代碼事件處理程序代碼procedure tform1.button1click(sender: tobject);begin mediaplayer1.play; /“播放”按鈕的onclick事件處理end;procedure tf

24、orm1.button3click(sender: tobject);begin mediaplayer1.pause; /“暫?!卑粹o的onclick事件處理end;procedure tform1.button2click(sender: tobject);begin mediaplayer1.stop; /“停止”按鈕的onclick事件處理end;procedure tform1.button4click(sender: tobject);beginprocedure tform1.button4click(sender: tobject);begin mediaplayer1.pre

25、vious; /“前一曲”按鈕的onclick事件處理end;procedure tform1.button6click(sender: tobject);begin mediaplayer1.next; /“后一曲”按鈕的onclick事件處理end;procedure tform1.button7click(sender: tobject);begin mediaplayer1.eject; /“彈出”按鈕的onclick事件處理end;10.4 簡單的cd播放器的制作(*“打開”按鈕的onclick事件處理*)procedure tform1.button5click(sender: t

26、object);begin if opendialog1.execute then begin mediaplayer1.filename:=opendialog1.filename; mediaplayer1.open; end;end;10.4 簡單的cd播放器的制作3timer1組件的組件的ontimer事件處理程序代碼事件處理程序代碼窗體中的ttimer組件的作用是為程序的運(yùn)行提供事件的控制,例如顯示cd播放的當(dāng)前位置、狀態(tài)等信息。這里利用tmemo組件顯示相關(guān)的信息。10.4 簡單的cd播放器的制作procedure tform1.timer1timer(sender: tobjec

27、t);var i,j,k:integer; pos1,pos2:longint; flag:boolean; str1:string;begin memo1.lines0:=總曲目數(shù):+inttostr(mediaplayer1.tracks); mediaplayer1.timeformat:=tfmilliseconds; pos1:=0; pos2:=0; flag:=true; for i:=0 to mediaplayer1.tracks-1 do /顯示正在播放的第幾首曲目 begin for j:=0 to i-1 do begin pos1:=pos1+mediaplayer1

28、.tracklengthj; pos2:=pos1; end; pos2:=pos2+mediaplayer1.tracklengthi; if mediaplayer1.positionpos1 then begin if mediaplayer1.positionpos2 then begin memo1.lines1:=正在播放的曲目:第 +inttostr(i+1)+ 首; flag:=false; end; end;10.4 簡單的cd播放器的制作 if flag then memo1.lines1:=正在播放的曲目:第 1 首; k:=round(mediaplayer1.length/60000); memo1.lines2:=曲目長度:+inttostr(k); str1:=當(dāng)前狀態(tài): ;(*顯示cd播放的當(dāng)前狀態(tài)*) case mediaplayer1.mode of mpnotready: memo1.lines3:=str1+未就緒; mpstopped: memo1.lines3:=str1+已

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論