本章要点
Image组件和图像显示
图形的绘制
声音的操作
Mediaplayer组件的使用
多媒体,是指用文字、图形、声音、图像、动画、视频等多种媒体作为承载信息的载体。
多媒体技术在计算机中的应用,改变了由“文字”单一媒体作为计算机交互手段的状况,开辟了计算机更加丰富多彩的应用领域。
Delphi集成开发环境提供的强大多媒体功能,为人们进行多媒体应用程序设计提供了很大的方便。
本章将介绍用Delphi进行多媒体应用程序设计的基本方法。
11.1Image组件和图像显示
Image组件位于组件模板的【Additional】选项卡上,其图标为。
Image组件是一个容器组件,利用它的Picture属性,可以显示一个图形或图像,也可以用来绘制位图。
11.1.1Image组件的属性
1.AutoSize属性
AutoSize属性决定组件是否自动调节尺寸以适应图像的大小。该属性为布尔型属性,若属性值为True,则组件会自动调节尺寸以适应图像的大小。其默认值为False。
2.Center属性
Center属性决定组件是否居中显示图像。该属性为布尔型属性,若属性值为True,组件居中显示图像;否则,在组件的左上角显示图像。其默认值为False。
3.Picture属性
Picture属性用来指定组件中显示的图像。
设置Image组件的Picture属性,也称为Image组件装入图像,方式有两种。
第一种方式,在程序设计时装入,是在程序设计时,通过设置组件的Picture属性,装入要显示的图像。激活Image组件,在对象检查窗口中,单击组件的Picture属性值栏右端的【…】
按钮,打开【PictureEditor】对话框,如图11-1所示。
在对话框中,单击【Load】按钮,打开【LoadPicture】对话框,如图11-2所示。
在对话框中,找到图像文件存放的位置,选择要显示的图像的文件类型和文件名,单击【打开】按钮,关闭该对话框,选择的图像显示在图11-1的对话框中,如图11-3所示。
单击【OK】按钮,关闭该对话框,装入的图像显示在Image组件中。如果装入之前,没有正确地设置AutoSize属性或下面要介绍的Stretch属性,组件只显示了图像的一部分或者图像只占据了组件的一部分,正确设置这两个属性,就可以完整显示图像了。
第二种方式,在程序运行时装入,是在程序代码中使用组件的LoadFromFile方法实现的,格式为:
LoadFromFile(图像文件的完整路径名)。
为了动态地选择要显示的图像文件,可以用打开图像文件对话框(OpenPictureDialog)来实现,将在后面的程序举例中介绍。
4.Stretch属性
Stretch属性决定显示的图像是否自动调节自身的尺寸以充满整个组件范围。该属性为布尔型属性,若属性值为True,图像自动充满整个组件范围;否则,图像按原来的尺寸显示,即要么尺寸太大,组件只显示图像的一部分,要么尺寸太小,图像只占据组件的一部分。其默认值为False。
11.1.2Image组件显示图像编程举例
例11-1用Image组件显示图像,并可控制图像按原尺寸显示或充满Image组件显示。
(1)新建一个项目,创建一个新窗体Form1。
(2)设置窗体属性,必要的窗体属性如表11-1所示。
(3)向窗体中添加组件。
根据程序功能要求,向窗体中添加1个Image组件--Image1、1个OpenPictureDialog组件--OpenPictureDialog1、3个Button组件--Button1、Button2和Button3,Button1组件用来打开图像文件,Button2组件用来控制充满Image显示或按原尺寸显示,Button3组件用来退出应用程序。
(4)设置组件属性,各组件属性如表11-2所示。
按功能要求,程序开始运行时,Button2的Caption属性为“充满”,即初始图像是按原尺寸显示的,Image1的Stretch属性应为False。按对话框第1章中所讲的方法设置OpenPictureDialog1的有关属性。
设置了属性的窗体如图11-4所示。
(5)选择事件并编写事件响应代码。
(6)保存单元文件为Unit11a.pas,项目文件为Project11a.dpr。
(7)编译、运行程序。在程序窗口中,单击【显示】按钮,打开【打开】对话框,在对话框中选择要显示的图像,然后单击对话框的【打开】按钮,选择的图像按原尺寸显示在程序窗口的Image组件中,如图11-5所示;单击【充满】按钮,图像充满Image组件显示,按钮变为【还原】,如图11-6所示;再单击【还原】按钮,图像又按原尺寸显示,如图11-5所示。
图11-5图像按原尺寸显示在Image组件中图11-6图像充满Image组件显示在Delphi集成开发环境中,与图形绘制有关的组件或对象有Shape(几何图形组件)、Canvas(画布对象)和Image(图像组件)。
11.2.1Delphi的坐标系统
坐标系统是图形设计的基础,绘制图形就要涉及坐标系统。本节首先简单介绍Delphi的坐标系统。
Delphi中有两个坐标系统:屏幕坐标系统和对象坐标系统。
屏幕坐标系统用于窗体在屏幕中的定位。屏幕左上角为屏幕坐标系统的坐标原点(0,0),X轴正方向水平向右,Y轴正方向垂直向下。窗体的Top、Left、Width、Height属性确定它在屏幕中的位置和大小,它们的值(其值是以像素--Pixel为单位)都是相对于屏幕坐标的原点而言的。
窗体中的组件在窗体中的位置及组件中的对象在组件中的位置,都是用对象坐标系统来表示的。对象坐标系统是相对坐标系统,它是指对象在其父对象中的位置。父对象的左上角为其对象坐标系统的原点,X轴的正方向水平向右,Y轴的正方向垂直向下,其坐标值也是以像素为单位。
11.2.2用Shape组件绘制几何图形
Shape组件位于组件模板Additional选项卡上,其图标为。
Shape组件可以在窗体、Panel(面板)组件上绘制一些常见的几何图形,如圆、椭圆、正方形、矩形等。
1.Shape的属性
1)Shape属性
Shape属性指定Shape组件绘制的几何图形的类型。该属性为枚举型属性,有stCircle(圆)、stEllipse(椭圆)、stRectangle(矩形)、stRoundRect(圆角矩形)、stRoundSquare(圆角正方形)和stSquare(正方形)6种取值。
2)Pen属性
Pen(称画笔)属性决定Shape组件绘制的几何图形的外框特性,如颜色、线型、线宽等。
该属性为集合型属性,包含4个子属性:Color、Mode、Style、Width,分别指定画笔的颜色、画笔与窗体上原有点的混合方式、线型、线宽。除Width外,其他子属性都为枚举型,用户可根据需要从列举的属性值中选择。
3)Brush属性
Brush属性决定Shape组件绘制的几何图形内填充的图案类型和颜色。该属性为集合型属性,包含2个子属性:Style和Color,分别决定填充图案的类型和颜色。这两个子属性都为枚举型属性,用户可根据需要从列举的属性值中选择。
2.用Shape组件绘制集合图形编程举例例11-2用Shape组件绘制几何图形,并可选择其几何图形的类型、边框颜色、填充图案和颜色。
(1)新建一个项目,创建一个新窗体Form1。
(2)设置窗体属性,如Caption属性值设置为:几何图形绘制等。
(3)向窗体中添加组件。
根据程序功能要求,向窗体中添加一个Shape组件(Shape1)、4个Label组件(Label1、Label2、Label3、Label4)、4个ComboBox组件(ComboBox1、ComboBox2、ComboBox3、ComboBox4)、一个Button组件(Button1)。
(4)设置窗体中组件的属性。
属性设置如表11-3所示。
(5)选择事件,编写事件过程代码。
对Button1,选择OnClick事件,事件响应过程为Button1Click,代码为:
(6)保存单元文件为Unit11b.pas,项目文件为Project11b.dpr。
(7)编译、运行程序。在程序窗口中,分别从【几何图形选择】、【画笔颜色选择】、【填充图案选择】、【填充颜色选择】组合框中选择相应的值,然后单击【画图】按钮,窗口画出相应的几何图形,如图11-8所示。
当然,这个程序实际应用价值不大,在这里只是说明Shape组件的使用方法。
11.2.3用Canvas对象绘图
Canvas(称为画布)不是一个组件,它只是绘图区域组件如Form、PaintBox(画板)等的成员,通常称为Canvas对象。
Canvas对象是Delphi中最重要的绘图工具。用Canvas对象绘图时,Canvas前面要加使用的绘图区域组件,如Form1.Canvas.…或PaintBox1.Canvas.…,默认的绘图区域组件为Form,可以省略。由于Canvas不是组件,所以无法在设计时通过对象检查器设置属性,只能在程序代码中设置。
1.Canvas对象的属性
Canvas对象的属性决定绘图使用的颜色、图案等。
1)Pen属性
Pen属性决定绘图时使用的线条的特性。该属性为集合型属性,包含Color、Style、Width和Mode4个子属性,分别决定线条的颜色、类型、宽度和模式。这4个子属性,除Width外,都是枚举型属性。
Color子属性的设置有两种方式,一种方式是使用Delphi定义的常量,其常用的取值及其含义如表11-4所示。
3)Font属性
Font属性决定绘制文本时的字体特性。同其他组件的Font属性一样,也是包含Name(字体名称)、Style(字形)、Size(字号)、Color(颜色)等子属性的集合型属性,这里不再赘述。
4)Pixels属性
Pixels属性指定绘图区域组件上一个像素的位置,该位置用其坐标值来表示,如PaintBox1.Canvas.Pixel[15,20],指定PaintBox1对象坐标系统中(15,20)处的一个像素。
2.用Canvas的方法绘图
用Canvas对象绘图,要用Canvas对象的方法。
1)绘制直线
绘制直线,要用Canvas对象的两个方法:MoveTo(x1,y1)和LineTo(x2,y2),其中x1、y1、x2、y2为表示坐标位置的整数值,MoveTo(x1,y1)决定直线的起始点,LineTo(x2,y2)决定直线的终止点,如要在PaintBox1上画一条(10,15)到(150,100)的直线,则代码为:
PaintBox1.Canvas.MoveTo(10,15);PaintBox1.Canvas.LineTo(150,100);若画的直线有颜色、线型、线宽的要求,还需先设置Pen属性。
在实际的绘图应用程序中,鼠标被用做绘图工具,通过鼠标位置的变化来绘制不同的图形。
鼠标有3个动作:鼠标按钮按下、鼠标移动、鼠标按钮放开。对应这3个动作,有3个不同的事件:OnMouseDown、OnMouseMove、OnMouseUp。
当应用程序检测到一个鼠标动作时,传递以下5个参数。
Sender--指出产生鼠标动作的组件对象。
Button--指出鼠标的按钮:左键、中键、右键。
Shift--鼠标动作时,键盘的Alt、Ctrl、Shift键和鼠标按钮的状态。
X、Y--事件发生时,鼠标的坐标。
其中:
Button参数为枚举类型,有mbLeft、mbMiddle、mbRight共3种取值,分别表示左、中、右键。
Shift参数为集合类型,由ssShift、ssAlt、ssCtrl、ssLeft、ssRight、ssMiddle、ssDouble组成。
例11-3设计一个简单的用鼠标在窗体上绘制直线的程序。
(1)新建一个项目,自动创建一个窗体Form1。
(2)在单元文件Unit1.pas的public域中,增加如下代码:
2)绘制折线
绘制折线,用Canvas对象的Polyline方法,语句格式为:
Canvas.Polyline(Point(x1,y1),Point(x2,y2),…,Point(x,y));其中(x1,y1),(x2,y2),…,(x,y)分别为折线的各个转折点的坐标。
3)绘制矩形
绘制矩形,用Canvas对象的Rectangle方法,语句格式为:
Canvas.Rectangle(x1,y1,x2,y2);其中(x1,y1)为矩形左上角的坐标,(x2,y2)为矩形右下角的坐标。
若,则为正方形。
4)绘制多边形