书城计算机网络Delphi程序设计教程
36209800000026

第26章 多媒体编程(2)

绘制多边形,用Canvas对象的Polygon方法,语句格式为:

Canvas.Polygon(Point(x1,y1),Point(x2,y2),…,Point(x,y));其中(x1,y1),(x2,y2),…,(x,y)分别为多边形的各个顶点的坐标。

5)绘制椭圆

绘制椭圆,用Canvas对象的Ellipse方法,语句格式为:

Canvas.Ellipse(x1,y1,x2,y2);其中(x1,y1)为椭圆外切矩形左上角的坐标,(x2,y2)为椭圆外切矩形右下角的坐标。

若,则为圆。

6)绘制圆角矩形

绘制圆角矩形,用Canvas对象的RoundRec方法,语句格式为:

Canvas.RoundRec(x1,y1,x2,y2,r1,r2);其中(x1,y1)为圆角矩形的外切矩形左上角的坐标,(x2,y2)为圆角矩形的外切矩形右下角的坐标,r1、r2为圆角的长、短半径。

7)绘制弓形

绘制弓形,用Canvas对象的Chord方法,语句格式为:

Canvas.Chord(x1,y1,x2,y2,x3,y3,x4,y4);其中x1、y1、x2、y2确定一个椭圆,被一条从(x3,y3)到(x4,y4)的直线分开,得到一段从(x3,y3)开始逆时针到(x4,y4)的椭圆弧,同(x4,y4)到(x3,y3)的直线围成的弓形。

8)绘制扇形

绘制扇形,用Canvas对象的Pie方法,语句格式为:

Canvas.Pie(x1,y1,x2,y2,x3,y3,x4,y4);其中x1、y1、x2、y2确定一个椭圆,从中截取圆心到(x3,y3)逆时针至圆心到(x4,y4)的部分。

9)绘制文本

绘制文本,用Canvas对象的TextOut方法,语句格式为:

Canvas.TextOut(x,y,constText);其中x,y决定文本的位置,constText为绘制的文本字符串。

如Form1.Canvas.TextOut(100,150,欢迎使用Delphi编程工具!)在(100,150)坐标处绘制文本“欢迎使用Delphi编程工具!”。

11.2.4用Image组件绘制位图

如上所述,利用Canvas对象可以在窗体或PaintBox组件上绘图。但要绘制位图,还得使用Image组件。

使用Image组件绘图,也是利用它的Canvas对象,通过设置Canvas的属性,调用Canvas的方法来实现。

11.3Delphi中简单的声音操作

声音是重要的多媒体元素之一。Delphi提供了很强的声音操作的功能,这主要由后面要介绍的MediaPlayer组件实现,本节只先介绍Delphi的简单声音操作功能。

11.3.1使用MessageBeep函数发声在Windows操作中,可以通过声音向用户进行必要的提示。在Delphi中,可以调用Windows的API函数MessageBeep,使计算机发出Windows的系统声音。函数的调用格式为:

MessageBeep(UType);其中UType指定函数发出声音的类型,其取值及对应的声音如表11-8所示。

MessageBeep函数只能发出Windows的系统声音,要随意播放WAV声音文件,可以使用SndPlaySound函数。该函数也是Windows的API函数,它的调用格式为:

SndPlaySound(声音文件名,SndAsync);

其第一个参数,给出WAV声音文件的全路径名;第二个参数,固定的SndAsync;若要停止声音文件的播放,第一个参数用nil,第二个参数用0。

要使用这个函数播放声音文件,还要在单元文件的头部uses中加入调用Windows多媒体函数动态链接库mmsystem。

由此,可以设计一个简单的WAV声音文件播放器,设置3个按钮。

单击第一个按钮,打开一个“打开文件对话框”,选择要播放的声音文件,代码段为:

procedureTForm1.Button1Click(Sender:TObject);11.4MediaPlayer组件

MediaPlayer组件是Delphi中功能强大、使用方便的多媒体组件,可以播放MP3、WAV、CD等音乐文件,播放AVI、DAT等视频文件,使用它可以很容易地开发多媒体应用程序。

MediaPlayer组件位于组件模板的System选项卡上,其图标为,放置在窗体上外观为一组可以定制的播放控制按钮,如图11-9所示。

11.4.1MediaPlayer组件的属性

1.AutoEnable和EnabledButton属性

AutoEnable属性决定在程序运行时,MediaPlayer组件是否能自动控制其按钮哪些可用、哪些不可用。如没有打开文件时,所有按钮都不可用;播放时,Play按钮就不可用等。该属性为布尔型属性,若属性值为True,则自动控制;否则,不能自动控制,这时按钮是否可用由EnabledButton属性来控制。其默认值为True。

如上所说,当AutoEnable属性为False时,MediaPlayer组件各个按钮是否可用由EnabledButton属性决定。该属性为集合型属性,包含9个布尔型子属性,每个子属性对应组件的一个按钮,当某个子属性的值为True时,则它对应的按钮可用,否则不可用。9个子属性的默认值都为True。

2.ColoredButtons属性

ColoredButtons属性决定MediaPlayer组件各个按钮是彩色的还是黑色的。该属性为集合型属性,包含9个布尔型子属性,每个子属性对应组件的一个按钮,当某个子属性的值为True时,则它对应的按钮为彩色,否则为黑色。9个子属性的默认值都为True。

3.VisibleButtons属性

VisibleButtons属性决定MediaPlayer组件各个按钮是否可见。该属性为集合型属性,包含9个布尔型子属性,每个子属性对应组件的一个按钮,当某个子属性的值为True时,则它对应的按钮可见,否则不可见。9个子属性的默认值都为True。

4.AutoOpen属性

AutoOpen属性决定在程序运行时,MediaPlayer组件是否自动打开由DeviceType属性指定的多媒体设备。该属性为布尔型属性,若属性值为True,则组件自动打开多媒体设备;若为False,组件要通过调用Open方法才能打开设备。其默认值为True。

5.AutoRewind属性

AutoRewind属性决定MediaPlayer组件是否可以自动返回并重新开始播放媒体文件。该属性为布尔型属性,若属性值为True,可自动返回。其默认值为True。

6.DeviceType属性和DeviceID属性

DeviceType属性指定MediaPlayer组件用Open方法打开的多媒体设备的类型。该属性为枚举型属性,有13种取值,其取值和含义如表11-9所示。

DeviceID属性为只读属性,返回当前打开设备的识别号。若无打开设备,则该属性值为0。

7.FileName属性

FileName属性指定MediaPlayer组件要播放的媒体文件名。

8.Display属性和DisplayRect属性

Display属性用于指定一个窗口类对象作为媒体文件的播放输出界面,其默认值为Nil,表示组件自己打开一个窗口输出媒体文件。

DisplayRect属性用于在Display属性指定的窗口中设置一个矩形区域,作为媒体文件的输出范围。

9.StartPos属性、EndPos属性和Position属性

StartPos属性用于设置MediaPlayer组件当前要播放的媒体文件的起始位置。

EndPos属性用于设置MediaPlayer组件当前要播放的媒体文件的终止位置。

MediaPlayer组件只能播放这个区间的内容。

而Position属性用于设置媒体文件的当前位置。

10.Length属性

Length属性返回媒体文件的长度。

11.TimeFormat属性

StartPos属性、EndPos属性、Position属性和Length属性都是用时间表示的,而时间的格式由TimeFormat属性来指定。该属性为枚举型属性,有tfMillisecond、stfHMS、tfMSF、tfFrames、tfSMPTE24、tfSMPTE25、tfSMPTE30、tfSMPTE30Drop、tfBytes、tfSamples、tfTMSF等11种取值。

12.Frames属性

Frames属性用于设置播放中单步前进或后退时跳过的帧数,通常用占媒体文件总帧数的百分比来表示。其默认值为10%。

13.Capabilities属性

Capabilities属性是只读的集合型属性,用于返回当前设备可以进行的操作,其值可以是:

MpCanEject--可以弹出;

mpCanPlay--可以播放;

mpCanRecord--可以录音;

mpCanStep--可以单步前进或后退;

mpUsesWindows--可以用窗口显示输出。

14.Mode属性

Mode属性是只读属性,用于返回设备当前的状态,其值可以是:

mpNotReady--设备未准备好;

mpStopped--停止状态;

mpPlaying--播放状态;

mpRecording--录音状态;

mpSeeking--搜索状态;

mpPaused--暂停状态;

mpOpen--设备已打开。

11.4.2MediaPlayer组件的方法

1.Open方法

Open方法用于打开媒体设备。在播放媒体文件前,必须先打开媒体设备。

2.Play、Pause、Stop、Next、Previous、Step、Back、StartRecording和Eject方法这几个方法实现的功能与MediaPlayer组件按钮的功能是一一对应的。实际上,按下组件的按钮,也是调用相应的方法。

3.Resume方法

Resume方法使媒体设备从暂停状态转到继续播放或录制状态。

4.PauseOnly方法

PauseOnly方法使媒体设备从播放或录制状态转到暂停状态。

5.Rewind方法

Rewind方法使播放的媒体文件回到指定的起始位置。

6.Close方法

Close方法用于关闭已打开的媒体设备。

11.4.3MediaPlayer组件使用举例例11-4用MediaPlayer组件设计一个简单的媒体播放器。

设计好的窗体如图11-10所示。

(1)组件及其属性设置

由图11-10可见,窗体中有一个MediaPlayer组件MediaPlayer1,一个指示播放进度的TrackBar1组件,一个打开文件对话框组件OpenDialog1,一个用于定时的Timer1组件,两个分别用于装入媒体文件和打开媒体设备的按钮Button1、Button2,3个Panel组件:DisplayPanel用于媒体文件播放输出,OuterPanel用于放置DisplayPanel,ButtonPanel用于放置按钮等组件,这些组件的属性设置如表11-10所示。

(2)选择事件,编写事件处理代码。

对窗体Form1,选择OnCreate事件,为MediaPlayer组件指定Display属性,事件处理代码段为:

对按钮Button1,选择OnClick事件,打开OpenDialog1组件,选择装入媒体文件,事件处理代码段为:

对按钮Button2,选择OnClick事件,为MediaPlayer1指定播放的媒体文件,打开媒体设备,事件处理代码段为:

对DisplayPanel,选择OnResize事件,改变DisplayPanel大小时,调整MediaPlayer1显示区的大小,事件处理代码为:

对定时器Timer1,选择OnTimer事件,控制TrackBar1随播放进行而变化,事件处理代码为:

对TrackBar1组件,选择OnChange事件,TrackBar1移动时,MediaPlayer1的Position属性随之改变,事件处理代码为:

(3)保存文件,编译、运行程序,播放媒体文件效果如图11-11所示。

习题11

1.用Image组件显示图像文件时,如何实现图像的缩放?

2.Delphi的Shape组件和Canvas对象各有什么功能?使用这两个对象绘图时,要进行哪些属性设置?

3.设计一个完整的带3个控制按钮的音乐文件播放器。

4.自己动手实现例11-4的媒体播放器。