Delphi 6集成开发环境07

上传人:油条 文档编号:12781534 上传时间:2017-09-04 格式:PDF 页数:45 大小:1.46MB
返回 下载 相关 举报
Delphi 6集成开发环境07_第1页
第1页 / 共45页
Delphi 6集成开发环境07_第2页
第2页 / 共45页
Delphi 6集成开发环境07_第3页
第3页 / 共45页
Delphi 6集成开发环境07_第4页
第4页 / 共45页
Delphi 6集成开发环境07_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《Delphi 6集成开发环境07》由会员分享,可在线阅读,更多相关《Delphi 6集成开发环境07(45页珍藏版)》请在金锄头文库上搜索。

1、 第 7 章 图形与图像 由于Windows是一个图形界面的操作系统,所以传统的Windows程序设计方法在处理有关图形设计时,多半是遵循着Windows诞生以来的方法,通过所谓的GDI(Graphics Device Interface)来进行图形的绘制。GDI式的绘图法对于早期曾经在Dos下自行编写绘图单元的程序设计师来说,虽然减少了许多类似于“重新发明轮子”的麻烦,但是相对地也带来另外一种程序设计的思维模式转变,相信曾经经历过这段过程的人都还心有余悸。对于完全没有任何程序设计经验的初学者来说,庞大复杂的GDI绘图系统更是一个难以跨越的学习障碍。但是,在Windows中不是没有一个简易可行

2、的绘图方法。本章要为你介绍的Delphi绘图系统,就提供了一个高度抽象化的绘图单元,让你可以用非常直观的方式来实现Windows下的绘图功能。 在Delphi中,专门定义了一组对象和部件用以绘制图形,并能完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序。 7.1 常用图形对象及简单应用 绘制图形一般要涉及到在什么地方绘图,使用何种颜色画和使用何种填充图案等问题。Delphi为用户提供了一个专供绘图的画布Canvas,每一个具有Canvas属性的对象,都可以作为绘制图形的

3、环境。例如,对于TForm对象(通常所说的窗口),它也有Canvas属性,换句话说,可以直接在窗体绘制各种各样的图形。 7.1.1 画布对象( TCanvas Object) TCanvas对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多组件(如TIMage,TMemo、TPaintBox等)的Canvas属性就是TCanvas对象。为了在一个组件上创建图形,TCanvas类中的成员调用Windows GDI函数。Canvas属性是对Windows GDI的一个综合的、面向对象的封装。Canvas总是准备着被使用,对它自己来说是一个对象。 下面我们通过一个简单的例子来说明如

4、何利用Canvas属性来绘图。 启动Delphi 6,新建一个应用程序。为窗体Form1的OnPaint事件添加如下代码: procedure TForm1.FormPaint(Sender: TObject); begin Form1.Canvas.TextOut(10,10,Canvas Object); Form1.Canvas.RoundRect(60,60,200,140,10,10); end; 编译并运行该程序,结果如图7-1所示。 在上面的程序中,我们应用了Canvas的TextOut和Ellipse方法,分别是输出一行文字和画一个圆角矩形,输出文本的字体、圆角矩形的线条和填充

5、色都是采用的默认值,通过改152 第7章 图形与图像 变Canvas的属性可以使输出的结果更加美观。 图7-1 Canvas应用实例 下面我们再来看一个小程序,打开一个新工程,为窗体Form1的OnPaint事件添加如下代码: procedure TForm1.FormPaint(Sender: TObject); var A,x1,y1,x2,y2:Double; D:Integer; i:Integer; E,M_PI:Double; begin D := 100; M_PI := 3.1415926535897932; for i := 0 to 720 do begin A := i

6、* M_PI / 360; E := D * (1 + sin(4 * A); x1 := 320 + E * cos(A); x2 := 320 + E * cos(A + M_PI / 5); y1 := 240 + E * sin(A); y2 := 240 + E * sin(A + M_PI / 5); Canvas.MoveTo(Round(x1),Round(y1); Canvas.LineTo(Round(x2),Round(y2); end; end; 运行该程序,结果如图7-2所示。 第7章 图形与图像 153 图7-2 Canvas应用实例 怎么样,酷吧。我们只是利用了D

7、elphi的Canvas绘图的基本观念和几个简单的基本函数就做出了这么美丽的电脑绘图。 TCanvas对象很多方法,可完成常用的绘图功能,现将方法及功能简介如表7-1: 表 7-1 TCanvas 对象的方法 方法名称 函数形式 函数功能 Arc Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer) 在椭圆上画一段弧,椭圆由(X1,Y1),(X2,Y2) 两点所确定的椭圆所决定。弧的起点是椭圆圆周和椭圆中心与(X3,Y3)连线的交点。弧矩形终点是椭圆圆周和椭圆中心与(X4,Y4)连线的交点,以逆时针方向画弧 Chord Chord(X1, Y1, X2, Y

8、2, X3, Y3, X4, Y4: Integer) 连接椭圆上的两点,椭圆由(X1,Y1),(X2,Y3) 两点所确定的矩形决定,(X3,Y3)是始点,(X4,Y4)是终点 Brushcopy BrushcopY(const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor ) 把位图的一部分复制到画布的某个矩形区域,并用画笔的当前颜色替换位图的颜色。参数Dest定义画布的一个矩形区域,该矩形用以填充位图,Bitmap定义位图;Source定义位图中的矩形区域,该区域上的位图将被复制;Color定义画笔中,用以

9、替换位图的颜色 CopyRect CopYRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect) 从另一个画布对象上复制部分图像到该画布。Canvas表示源画布,Source是源画布上要复制的图像区域。Dest表示目标画布上将接受复制 Draw Draw(X, Y: Integer; Graphic: TGraphic) 在画布给定的像素点坐标(X,Y)处画Graphic所给的图像,该图像可以是位图,图标或元位图 154 第7章 图形与图像 (续表)方法名称 函数形式 函数功能 Ellipse Ellipse(X1, Y1,

10、X2, Y2: Intege) Ellipse(const Rect: TRect) 在画布指定的矩形边界上画一椭圆,(X1,Y1)是矩形左上角的像素坐标,X2,Y2是矩形右下角的像素坐标。如果矩形形成一个区域,将出现一个椭圆 LineTo LineTo(X, Y: Integer) 从当前位置画一条线至(X,Y)所指定的位置,并把笔的位置移至(X ,Y) MoveTo MoveTo(X, Y: Integer) 将笔的当前位置设置到点(X,Y)处,笔的当前位置在PenPos属性中,改变笔的当前位置使用MoveTo方法,不要设法改变PenPos的值 Pie Pie(X1, Y1, X2, Y2

11、, X3, Y3, X4, Y4: Integer) 绘制椭圆的一部分,椭圆由(X1,Y1),(X2,Y2)所指定的矩形所决定,绘制的那部分由椭圆中心到(X3,Y3),(X4,Y4)两点的两条辐射线所决定 Polygon Polygon(Points: array ofTPoint) 在画布上绘制一系列的点,各点依次连成线,最后将首尾两点相接形成一个区域,并用当前笔刷填充此区域 Polyline Polyline(Points: array ofTPoint) 在画布上用当前画笔绘制一系列的点,各点依次连成线 RoundRect RoundRect(X1, Y1, X2, Y2, X3, Y3

12、: Integer) 在画布上用当前画刷绘制圆角矩形,(X1,Y1)是矩形的左上角,(X2,Y2)是矩形的右下角,X3和Y3分别对应椭圆弧的宽和高 StretchDraw StretchDraw(const Rect: TRect; Graphic: TGraphic) 在Rect参数指定的矩形内画一图像,图像延伸改变大小以适应矩形 Rectangle Rectangle(X1, Y1, X2, Y2: Integer) Rectangle(const Rect: TRect) 在画布上用当前画刷绘制矩形,(X1,Y1)是矩形的左上角,(X2,Y2)是矩形的右下角 DrawFocuseRect

13、 DrawFocusRect(const Rect: TRect) 绘制一矩形以指示此矩形获得焦点。此方法是异或(XOR)函数,第二次调用时原有矩形将消失。DrawFocuseRect绘制的矩形不能滚动。要实现滚动功能则先调用此方法使矩形消失,待滚动过后重新绘制另外,在使用Canvas时还要注意:当窗口进行重画时, 画布上的图像将消失, 比如当窗口进行最小化又重新恢复时,就会引起画布上图像的消失,另外当刚刚运行程序时,窗口也是属于重新绘制,所以如果在绘制窗口之前在画布上绘图,弹出窗口后将不能显示出图像,比如在TForm1.FormCreate() 事件中进行画布绘图操作将是徒劳的,但可以在此事

14、件中进行画布操作的准备工作,比如设置画笔的颜色和宽度等。 7.1.2 画笔对象( TPen Object) 使用TPen类可以描述Windows的笔(Pen)属性,应用程序常用TPen对象在画布上绘制各种线段。所有和线条有关的绘图函数都会受TPen影响,如LineTo,Ellipse,Polygon,第7章 图形与图像 155 PolyLine,Rectangle等函数都使用画笔来画线,基本上我们可以将这些绘图工具归类为向量式的绘图工具,所有的向量式绘图工具都使用Pen来进行画线的动作。我们可以利用Canvas.Pen来存取Pen ,借此修改Pen的性质,画笔的颜色在Color属性中定义,线段

15、宽度在Width属性中定义,类型和模式则分别在Style和Mode属性中定义。 Color属性控制线的颜色,可以采用颜色向量描述颜色,如clBlack(黑色)、clBlue(蓝色)和clGreen(绿色)等。 Style属性确定线的式样,可以采用式样常量描述式样,如psSolid(实线)和psDash(短线)等。 Style属性的具体取值和含义如表7-2所示。 表 7-2 Style 的取 值和含义 Style取值 含义 pSolid 画实线段 pSDash 画由下划线组成的线段 pSDot 画由点组成的线段 psDashDot 画点划线 psDashDotDot 画双点划线 psClear

16、画看不见的线段 psInsideFrame 画边界的矩形线框 新建一个工程,设置Form1的Color属性为clWhite,将下面的代码加入窗体的onClick事件过程中,运行程序,单击窗体便可画出如图7-3所示的各种线型。 procedure TForm1.FormClick(Sender: TObject); var i:Integer; begin for i := 0 to 6 do begin Canvas.Pen.Style := TPenStyle(i); Canvas.MoveTo(110,10 + i * 20); Canvas.LineTo(250,10 + i * 20); end; end; 图中从上到下对应的样式变量名为psSolid,psDash,psDot,psDashDot,psDashDotDot,psClear和psInsideFrame。注意psClear没有在图中显示

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号