第十一章多媒体编程•11.1动画组件TAnimate•11.2简单的动画播放程序的设计•11.3简单的CD播放器的制作•习题11.1动画组件TAnimate•1.用途Delphi提供了一个TMediaPlayer组件,使得程序员可以使用它快速开发音频或者视频播放器。TMediaPlayer组件提供了一个MCI(MediaControlInterface,媒体控制界面),它可以轻松地在程序中加入多媒体功能。完整的MCI驱动程序能够支持*.wav、*.dat、*.midi和*.cda等格式的文件。11.1动画组件TAnimate•2.主要属性(1)Active属性(2)Center属性(3)FileName属性(4)FrameCount属性(5)FrameHeight和FrameWidth属性(6)Open属性(7)Repetitions属性(8)StartFrame属性和StopFrame属性(9)Timers属性11.1动画组件TAnimate•注意:–在使用Play方法时应用注意以下几点:–FromFrame的值应该小于或等于ToFrame的值。–Count参数值为0的时候代表持续播放,直到使用Stop方法时停止。–StartFrame和StopFrame的值将在使用Play方法时被FromFrame和ToFrame的值覆盖。11.1动画组件TAnimate【例11-1】使用Tanimate组件设计一个简单的动画播放程序。11.1动画组件TAnimate•11.1.2媒体播放器组件TMediaPlayer–1.用途–Delphi提供了一个TMediaPlayer组件,使得程序员可以使用它快速开发音频或者视频播放器。TMediaPlayer组件提供了一个MCI(MediaControlInterface,媒体控制界面),它可以轻松地在程序中加入多媒体功能。完整的MCI驱动程序能够支持*.wav、*.dat、*.midi和*.cda等格式的文件。11.1动画组件TAnimate•2.主要属性–(1)AutoEnable属性–(2)EnabledButtons属性–(3)AutoOpen属性–(4)AutoRewind属性–(5)ColoredButton属性–(6)DeviceType属性–(7)Display属性(8)DisplayRect属性(9)Mode属性(10)FileName属性(11)StartPos属性(12)EndPos属性(13)Position属性(14)Length属性11.1动画组件TAnimate•【例11-2】使用TMediaPlayer组件编写一个简单的AVI文件播放器程序。11.2简单的动画播放程序的设计–为了更好地理解TAnimate组件的属性、方法和事件,这一节创建一个简单的动画播放程序。通过实例3,更好地掌握TAnimate组件的应用以及多媒体程序的设计思路。11.2简单的动画播放程序的设计•11.2.1界面设计–新建一个工程PrjTAnimate.dpr,按图11-6设计动画播放程序的界面。窗体及其组件属性的设置值如表11-2所示。11.2简单的动画播放程序的设计图11-6设计动画播放程序的界面11.2简单的动画播放程序的设计•11.2.2代码编写–1.定义存放起始帧、结束帧、循环次数和总帧数–var–Form1:TForm1;–StartFrame,StopFrame,RepeatFrame,SumFrame:integer;11.2简单的动画播放程序的设计•2.TAnimate1组件的OnOpen事件处理程序代码•procedureTForm1.Animate1Open(Sender:TObject);•begin•ShowMessage('TAnimaet组件触发OnOpen事件,初始化变量!');•(*初始化变量*)•StartFrame:=Animate1.StartFrame;•StopFrame:=Animate1.StopFrame;•RepeatFrame:=Animate1.Repetitions;•SumFrame:=Animate1.FrameCount;•Estartframe.Text:=IntToStr(StartFrame);•Estopframe.Text:=IntToStr(StopFrame);•Esumframe.Text:=IntToStr(SumFrame);•Erepeatframe.Text:=IntToStr(RepeatFrame);•end;11.2简单的动画播放程序的设计•3.“开始播放”按钮的OnClick事件处理程序代码•procedureTForm1.playClick(Sender:TObject);•begin•StartFrame:=StrToInt(Estartframe.text);•StopFrame:=StrToInt(Estopframe.text);•RepeatFrame:=StrToInt(Erepeatframe.text);•(*验证动画属性设置编辑框的数据合法性*)•if(StartFrameStopFrame)or(StopFrameSumFrame)then•11.2简单的动画播放程序的设计•begin//输入范围错误•ShowMessage('输入帧的范围错误,所有设置复位!');•Animate1.StartFrame:=1;•Animate1.StopFrame:=Animate1.FrameCount;•Animate1.Repetitions:=0;•Estartframe.Text:='1';•Estopframe.Text:=IntToStr(Animate1.FrameCount);•Erepeatframe.Text:='0';•end•else•11.2简单的动画播放程序的设计•begin•(*设置组件的Enabled属性*)•play.Enabled:=False;•stop.Enabled:=True;•Estartframe.Enabled:=False;•Estopframe.Enabled:=False;•Erepeatframe.Enabled:=False;•(*设置TAnimate组件的属性,然后进行播放*)•Animate1.StartFrame:=StartFrame;•Animate1.StopFrame:=StopFrame;•Animate1.Repetitions:=RepeatFrame;•Animate1.Active:=True;//进入播放状态•end;•end;11.2简单的动画播放程序的设计•4.“停止播放”按钮的OnClick事件的处理程序代码•procedureTForm1.stopClick(Sender:TObject);•begin•(*停止播放*)•Animate1.Stop;•play.Enabled:=True;//“开始播放”按钮可用•stop.Enabled:=False;•(*设置文本框为可用*)•Estartframe.Enabled:=True;•Estopframe.Enabled:=True;•Erepeatframe.Enabled:=True;•end;11.2简单的动画播放程序的设计–运行程序,在Estopframe文本框中输入结束帧为9,单击“开始播放”按钮,结果如图11-7所示。11.2简单的动画播放程序的设计•图11-7运行结果11.3简单的CD播放器的制作•11.3.1界面设计–新建一个工程PrjPcd.dpr,设计如图11-8所示的CD播放器的界面,窗体及其组件属性的设置值如表11-3所示。11.3简单的CD播放器的制作图11-8CD播放器的界面11.3简单的CD播放器的制作•11.3.2代码编写–1.初始化程序–procedureTForm1.FormCreate(Sender:TObject);–begin–withMediaPlayer1do–begin–Visible:=True;–DeviceType:=dtCDAudio;//设置多媒体设备的类型–Open;//通过Open方法打开CD播放设备–end;–end;11.3简单的CD播放器的制作•2.按钮的OnClick事件处理程序代码•procedureTForm1.Button1Click(Sender:TObject);•begin•MediaPlayer1.play;//“播放”按钮的OnClick事件处理•end;•procedureTForm1.Button3Click(Sender:TObject);•begin•MediaPlayer1.Pause;//“暂停”按钮的OnClick事件处理•end;11.3简单的CD播放器的制作•procedureTForm1.Button2Click(Sender:TObject);•begin•MediaPlayer1.Stop;滞不前//“停止”按钮的OnClick事件处理•end;•procedureTForm1.Button4Click(Sender:TObject);•begin•MediaPlayer1.Previous;//“前一曲”按钮的OnClick事件处理•end;•procedureTForm1.Button6Click(Sender:TObject);•begin•MediaPlayer1.Next;//“后一曲”按钮的OnClick事件处理•end;•procedureTForm1.Button7Click(Sender:TObject);•begin•MediaPlayer1.Eject;勤部//“弹出”按钮的OnClick事件处理•end;11.3简单的CD播放器的制作•(*“打开”按钮的OnClick事件处理*)•procedureTForm1.Button5Click(Sender:TObject);•begin•ifOpenDialog1.Executethen•begin•MediaPlayer1.FileName:=OpenDialog1.FileName;•MediaPlayer1.Open;•end;•end;11.3简单的CD播放器的制作•3.Timer1组件的Timer1Timer事件处理程序代码•窗体中的Timer组件的作用是为程序的运行提供事件的控制,例如显示CD播放的当前位置、状态等信息。这里利用Memo组件显示相关的信息。•procedureTForm1.Timer1Timer(Sender:TObject);•var•i,j,k:integer;•pos1,pos2:longint;•flag:Boolean;•str1:string;11.3简单的CD播放器的制作•begin•memo1.lines[0]:='总曲目数:'+inttostr(MediaPlayer1.Tracks);•MediaPlayer1.TimeFormat:=tfMilliseconds;•pos1:=0;•pos2:=0;•flag:=true;•fori:=0toMediaPlayer1.Tracks-1do//显示正在播放的第几首曲目•begin•forj:=0toi-1do•begin•pos1:=pos1+MediaPlayer1.TrackLength[j];•pos2:=pos1;•end;11.3简单的CD播放器的制作•pos2:=pos2+MediaPlayer1.TrackLength[i];•ifMediaPlayer1.Positionpos1then•begin•ifMediaPlayer1.Positionpos2then•begin•memo1.lines[1]:='正在播放的曲目:第'+inttostr(i+1)+'首';•flag:=False;•end;•end;•end;•11.3简单