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

第25章 多媒体编程(1)

本章要点

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)绘制多边形