绘制多边形,用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的媒体播放器。