收藏 分享(赏)

Delphi 7教程9.ppt

上传人:kaixinyidian 文档编号:12219225 上传时间:2021-11-14 格式:PPT 页数:38 大小:588KB
下载 相关 举报
Delphi 7教程9.ppt_第1页
第1页 / 共38页
Delphi 7教程9.ppt_第2页
第2页 / 共38页
Delphi 7教程9.ppt_第3页
第3页 / 共38页
Delphi 7教程9.ppt_第4页
第4页 / 共38页
Delphi 7教程9.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、,本章要点:,画布对象及其应用 TShape组件的属性、事件和方法 TImage组件的属性、事件和方法 Paintbox组件的属性、事件和方法 使用鼠标事件的绘图,第9章 图像图形应用编程,9.1 图形应用编程,本章主要是讲解图形图像对象的概念以及如何在程序运行时绘制图形图像等内容,主要是通过一些例子来讲解Delphi 7.0 对图形图像强大的处理功能。在Delphi 7.0中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,得到不同风格的图形。另外,通过鼠标事件的定义,可以方便地设计图形绘制程序。,9.1

2、.1 画布对象属性,在图形应用编程中,最常用到的是canvas类,就是常说的画布。它可以将某些组件的表面作为一张画布,允许编程者利用有关的命令在其上任意地作图。很多组件都支持画布这个属性,同时画布本身又是一个对象,它也有自己的属性,但是这些属性必须要在程序执行时才可以来进行设置。常用的属性有以下几个。 (1)图形像素数组(PixArray)属性 PixArray属性确定用于像素颜色的读取和像素颜色的设置。 (2)画笔(Pen)属性 Pen属性确定画布用做画线及轮廓线的画笔。,9.1.1 画布对象属性(1),(3)画刷(Brush)属性 Brush属性确定画布用于填充图像及背景色的颜色及图案。

3、(4)字体(Font)属性 Font属性确定画布的字体。,1. 像素 像素是构成图形的最基本的单位,画布上每一个点都有对应的像素,用来代表构成一个图形的某一点的颜色。像素的处理一般包括像素颜色的读取和像素颜色的设置。最常用的是利用画布的Pixels属性,来绘制函数曲线。 【例9-1】 用Pixels属性来画Y=X的函数曲线。 运行后的界面如图9-1所示。 图9-1 用像素来画图 主要的功能如下: 单击显示按钮,在屏幕上就可以画出Y=X的函数图。 主要的程序代码如下:,图9-1 用像素来画图,9.1.1 画布对象属性(2),procedure TForm1.Button1Click(Sender

4、: TObject); VAR xt,yt,t:integer; /xt,yt是用来决定像素的位置,t用来控制循环次数。 x,y:real; /x,y是用来取得屏幕的中心 begin x:=form1.ClientWidth/2; / ClientWidth属性指的是不包括标题栏在内的宽度。 y:=form1.ClientHeight/2; / ClientHeight属性指的是不包括标题栏在内的高度。 for t:=-10000 to 10000 do begin xt:=round(t/100+x); t之所以要除以100是因为要让像素的显示紧密点没有断断续续的感觉,加上x是因为原来的中

5、心在(0,0)的地方,也就是画布的左上角,而现在是要移到(x,y)的地方,将坐标原点进行了 移动。 yt:=round(-t/100+y); canvas.Pixelsxt,yt:=clblue;/画布的像素颜色为蓝色。 end; end;,9.1.1 画布对象属性(3),2. 画笔 画布中的画笔属性是用来控制用户画一条线时的线条形状。画一条线其实就是改变两点间的像素颜色。 画笔本身又包含了四个可以设置的属性:颜色(Color)、宽度(Width)、风格(Style)和显示模式(Mode)。,(1)颜色属性(Color) 在了解颜色属性前,先来了解一下Windows的颜色系统。 以前可能已经听

6、说了一个颜色是多少位的,这是表示所能表达的颜色数多少的指标,是什么意思呢?比如1位的颜色则表示2的一次方,即黑或白两种颜色,这种图片很少见。8位的颜色则表示最多可以有28=256种颜色,表明一张图片中最多可以有256种颜色。24位的图片可以包含16M位的颜色。比如使窗体的背景色为白色则可以用: Form1.Color:=RGB(255,255,255); 当然你也可以用数值法来直接表达,如何写呢?在Delphi 7.0中是在十六进制数前面加$符号。因为Windows 98中的颜色系统是32位的,所以头8位不用,用0来表示。红色可以写成:Form1.Color:=$00FF0000; 注意这里是

7、十六进制数。后6位每两位代表一个分量(00-FF),头两位不用。,9.1.1 画布对象属性(4),接下来了解画笔的颜色属性,它的缺省值为黑色。如果要将画笔的颜色定义为绿色,那么可以用以下的代码: canvas.pen.color:=clgreen; 或者是: canvas.pen.color:=$0000ff00;,(2)风格属性(Style) 风格属性是用来设置画笔所画的线的类型,默认值为psSolid(实线),详见表9-2。详见本教程P152页。 属性值说明PsClear没有线条PsSolid实线PsDash虚线PsDot圆点PsDashDot点划线PsDashDotDot双点划线设置画笔

8、的类型可通过如下语句实现:canvas.Pen.Style:=; 例如:canvas.Pen.Style:=psDashDot;就设置了画笔的风格类型为点划线。 (3)显示模式属性(Mode) 显示模式属性确定画笔是如何画线的,它的取值有以下几种,详见表9-3。详见本教程P15页。 为了便于表达,可以用三个字母来表示颜色:P(画笔的颜色),B(画刷的颜色),A(背景中已经存在的颜色)。,9.1.1 画布对象属性(5),【例9-2】 画两个方形,并且两个方形之间有一个交集,如图9-2所示。,图9-2 pmCopy 属性, 主要的代码如下: procedure TForm1.Button1Clic

9、k(Sender: TObject); begin Canvas.Pen.Width:=3; /边框宽度3 Canvas.Pen.Color:=clRed; /画笔颜色:红 canvas.Brush.color:=clYellow;/填充色:黄 Canvas.Pen.Mode:=pmCopy;/系统默认的模式,可写可不写 canvas.Rectangle(10,10,300,300); /画一个矩形,左上角的坐标是(10,10),右下角的坐标为(300,300) canvas.Rectangle(50,50,340,340); / 画一个矩形,左上角的坐标是(50,50),右下角的坐标为(34

10、0,340) end; 当把Canvas.Pen.Mode:=pmCopy;改为Canvas.Pen.Mode:=pmblack;它的显示效果如图9-3所示。,9.1.1 画布对象属性(),如果把Canvas.Pen.Mode:=pmCopy;改为Canvas.Pen.Mode:=pmwhite;那么图9-3就变成了白色的了。 如果把Canvas.Pen.Mode:=pmCopy;改为Canvas.Pen.Mode:=pmnot,当第一次单击显示按钮的时候,则显示的结果如图9-4所示。 第二次单击显示按钮的时候,显示结果如图9-5所示。记住pmNot是对背景色求反的一种操作。, 第一次按按钮

11、A. 画第一个方形 由于背景色是灰色的RGB(191,191,191),所以他的反色为RGB(64,64,64)是一种浅黑色。,9.1.1 画布对象属性(),B. 画第二个方形 在没有图像交叉的部分与画第一个方形没什么两样,背景画图处还是灰色的RGB(191,191,191),所以画出来的还是淡黑色的。, 第二次按按钮 根据前面讲的外面黑色的部分被反成灰色,而中间的灰色被求了两次反,还是灰色。如图9-5所示。 简单地举以上几个例子,其他的属性值自己去尝试一下,你可以看到许多意想不到的效果。 (4)宽度属性(Width) 表示画笔的粗细程度,单位是像素,默认值为1,表示为一个像素。设置方式为:

12、canvas.Pen.Width:=; 例如:canvas.Pen.Width:=5;就设置了画笔的宽度为5个像素。,3. 画刷(Brush) 画刷(Brush)属性是用来设置图形内部区域的填充方式。 (1)颜色(Color)属性 颜色属性是来设置画刷的填充区域的颜色,默认情况下是白色。,9.1.1 画布对象属性(),设置方法为 canvas. brush.color:=。 例如 canvas.brush.color:=clred; 就可以将画刷的颜色设置为红色.常见的颜色值参照表9-1。详见本教程P155页。,(2)风格(Style)属性 风格属性是用来确定图形的填充方式,它的取值见表9-4

13、。 设置方法为:canvas.brush.style:; 例如:canvas.brush.style:bsCross; 就设置了画刷的线条的类型是十字线。 (3)位图(Bitmap)属性 位图属性用来设置一个存放图形数据的对象,可以在程序运行阶段动态地创建或者删除,常用的命令有: Bitmap.create /创建一个位图对象。 Bitmap.free /释放位图对象。 Bitmap.loadfromfile(文件路径) /通过文件路径调入位图,装载在位图对象中。 Bitmap.Draw /在指定的地点按原图的大小显示图形或图像。,9.1.1 画布对象属性(),【例9-3】位图的创建和释放,主

14、界面如图9-6所示。, 程序代码如下: procedure TForm1.Button1Click(Sender: TObject); var bitmap1:tbitmap;/定义位图变量 begin bitmap1:=Tbitmap.Create;/创建位图bitmap1 bitmap1.LoadFromFile(d:hand.bmp);/装入图像文件 form1.Canvas.Draw(10,20,bitmap1);/在坐标(10,20)的地方显示图形。 bitmap1.Free;/释放位图 end; 4. 作图区域 作图区域Rect是Trect属性中的对象,同时它也是一个函数。它的作用

15、就是定义一个矩形区域对象。Rect对象用两个Tpoint类型指明区域范围或者用四个整型变量定义区域范围。,图9-6 位图操作,9.1.1 画布对象属性(1),它的调用如下: function Rect(ALeft, ATop, ARight, ABottom: Integer): TRect; overload; function Rect(const ATopLeft, ABottomRight: TPoint): TRect; overload; Rect常用的方法有: Rect(x1,y1,x2,y2) /定义Rect区域范围 Fillrect /用填充色填充Rect区域 FloodFi

16、ll /用填充色填充Rect之外的区域 TextRect /在Rect对象中显示文本 StretchDraw /把Bitmap填充到Rect 【例9-4】 Rect对象的方法和属性 运行后界面如图9-7所示。 (主要代码见本教程P157 页),图9-7 Rect 对象操作,9.1.2 字体(1),1. Height字高 先来看一个程序界面,如图9-8所示。 主要的代码如下: procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Font.Height:=-18; Canvas.TextOut(20,30,我的HEIGHT为-1

17、8); Canvas.Font.Height:=18; Canvas.TextOut(40,60,我的HEIGHT为18); end; 2. Size字号 字号对于你来说肯定不会陌生的,在任何字编辑软件中都会使用它。它的设置一般为canvas.font.size=; 如 canvas.Font.Size:=10; 3. Name名称属性 这个属性中包含了字体的名称:比如宋体、仿宋、楷体_gb2312等字体的名字。,字体本身也有很多的属性,下面进行简单的介绍。,图9-8 字体Height属性,9.1.2 字体(2),4. Style属性 字体还有一个Style的属性,这个属性表示字体是什么类型的

18、。比如: fsBold(黑体), fsItalic(斜体), fsUnderline(下划线), fsStrikeOut(中划线)。 它的设置一般为:Canvas.Font.Style:=; 如:Canvas.Font.Style:=fsBold;注意要用,9.1.3 画布对象的方法,1. Moveto方法 作用是将画笔移到指定的位置。画笔的当前位置在PenPos属性中。方法为: procedure MoveTo(X, Y: Integer); 2. Lineto方法 从当前位置画一条线至(X,Y)所指定的位置,并把笔的位置移至(X,Y)。方法为: procedure LineTo(X, Y:

19、 Integer);,9.1.3 画布对象的方法(1),3. 画折线的方法(Polyline方法) 调用PolyLine方法,把提供的多个点依次连接起来,画一系列的直线,其语法格式为:Canvas.PolyLine(Point(x1,y1),Point(x2,y2),Point(x3,y3),); 4. 画矩形的方法(Rectangle方法) Rectangle方法是在画布上用当前画刷绘制矩形,其语法格式为: Canvas.Rectangle(X1, Y1, X2, Y2);其中(x1,y1)是矩形的左上角,(x2,y2)是矩形的右下角。 5. 画圆角矩形的方法(Roundrect) Roun

20、drect方法是用来画圆角矩形的,其语法格式为: Canvas.RoundRect(X1,Y1,X2,Y2,X3,Y3);其中(X1,Y1)为矩形的左上角,(X2,Y2)为右下角。其中X3,Y3为圆角的长短半径。 6. 画圆或画椭圆的方法(Ellipse方法) Ellips方法在画布指定的矩形边界上画一个椭圆,其语法格式为: Canvas.Ellipse(X1,Y1,X2,Y2);其中,(X1,Y1)是矩形左上角的像素坐标,X2,Y2是矩形右下角的象素坐标。如果矩形形成一个区域,将出现一个椭圆。如果这个区域是个正方形的话,则为圆。 7. 画弧线曲线的方法(Arc方法) Arc方法是用来画椭圆弧

21、线曲线的,其语法格式为:,9.1.3 画布对象的方法(2),Canvas.Arc(X1,Y1,X2,Y2,X3,Y3,X4,Y4);其中(X1,Y1)、(X2,Y2)定义矩形,圆弧以(X3,Y3)为起点,逆时针到(X4,Y4)点结束。 8. 画多边形方法(Polygon方法) Polygon方法是用于画由一系列点定义的多边形,其语法格式为: Canvas.Polygon(Point(x1,y1),Point(x2,y2),Point(x3,y3),); 其中(Xi,Yi)为多边形的顶点。它跟Polyline方法的区别在于它能自动封闭图形。 9. 画饼图的方法(Pie方法) Pie方法是用来画饼

22、图,其语法格式为: Canvas.Pie(X1,Y1,X2,Y2,X3,Y3,X4,Y4); Pie方法画由(X1,Y1)及(X2,Y2)确定的椭圆,从椭圆的中心经(X3,Y3)到椭圆的中心经(X4,Y4)的饼图。 10. 画帽图的方法(Chord方法) Chord方法是用来画帽图的,其语法格式为: Canvas.Chord(X1,Y1,X2,Y2,X3,Y3,X4,Y4);Chord方法连接椭圆上的两点,椭圆由(X1,Y1),(X2,Y3)两点所确定的矩形决定,(X3,Y3)是始点,(X4,Y4)是终点。,9.1.3 画布对象的方法(3),【例9-5】画各种曲线的程序,如图9-9所示。,图9

23、-9 各种曲线, 主要的程序代码如下: procedure TForm1.FormPaint(Sender: TObject); begin with canvas do begin Pen.Color:=clred;/设置画笔颜色 pen.Width:=3;/设置画笔大小 moveto(10,10); lineto(50,60); font.Color:=clPurple; textout(10,60,画直线); pen.Color:=clgreen; polyline(point(100,10),point(120,50),point(140,10),point(160,50), poin

24、t(180,10); textout(80,60,用Polyline命令来画折线); pen.Color:=clyellow; Rectangle(240,10,340,50) ; Textout(220,60,用Rectangle命令来画矩形); pen.Color:=clMaroon;,9.1.3 画布对象的方法(4),Roundrect(400,10,450,60,5,10); textout(360,60,用Roundrect命令来画圆角矩形); pen.color:=clNavy; Ellipse(10,100,100,150) ; textout(10,160,用Ellipse命令

25、来画椭圆); pen.Color:=clPurple; arc(140,100,240,150,160,110,220,130); textout(140,160,用arc命令来画圆弧); pen.Color:=clOlive;pie(260,100,360,150,280,140,330,140); textout(260,160,用pie命令来画饼图); pen.Color:=clFuchsia;chord(380,100,480,150,390,120,450,120); textout(380,160,用chord命令来画帽图); pen.Color:=clTeal;polygon(p

26、oint(10,200),point(90,200),point(50,250); textout(10,260,用Polygon命令来画三角形); pen.Color:=clAqua; polyline(point(160,200),point(240,200),point(200,250),point(160, 200);/注意和Polygon命令的区别 textout(160,260,用Polyline命令来画三角形); end;end;,9.1.3 画布对象的方法(5), 主要程序代码 procedure TForm1.FormPaint(Sender: TObject); var i

27、:integer; str1:string; begin for i:=0 to 255 do begin with canvas do begin pen.Color:=rgb(i,i,i);/指定画笔颜色 moveto(0,i); lineto(form1.ClientWidth,i); end; end; with canvas do,【例9-6】 将窗体背景颜色由深变浅显示,如图9-10所示。,图9-10 颜色变化,9.1.3 画布对象的方法(6),begin brush.style:=bsclear; font.Color:=clwhite; font.Size:=15; font.

28、Style:=fsbold; str1:=上深下浅的窗体背景 ; textout(30,40,上深下浅的窗体背景); end; end;,【例9-7】 程序功能:当在界面上任意单击时,屏幕上产生一个随机大小颜色的矩形,里面有一个椭圆。实现后的界面如图9-11所示。,图9-11 随机产生, 首先定义一个过程star,它的功能是画出随机大小颜色的矩形。主要的程序代码如下: procedure star(a,b:integer); var x,y:integer;,9.1.3 画布对象的方法(7),c,d:tcolor;/定义颜色变量 point1,point2:tpoint; rect1:trec

29、t; begin x:=random(form1.ClientWidth);/取得一个随机值 y:=random(form1.ClientHeight); c:=random($00ffffff);/取得一种随机颜色 d:= random($00ffffff); form1.Canvas.Pen.Color:=c;/设置画笔的颜色 form1.Canvas.Pen.Width:=3;/设置画笔的线宽 point1:=point(x-a,y-b);/矩形左上角的坐标 point2:=point(x+a,y+b);/矩形右上角的坐标 rect1:=rect(point1,point2); form

30、1.Canvas.rectangle(rect1);/画矩形 form1.Canvas.Pen.Color:=d;/设置画椭圆的画笔的颜色 form1.Canvas.Pen.Width:=1;/设置画椭圆的画笔的线宽 form1.Canvas.Brush.Color:=d ;/设置画椭圆的填充色 form1.Canvas.Ellipse(rect1);/画椭圆 form1.canvas.Brush.Style:=bsclear;/取消填充色 end;,9.1.3 画布对象的方法(8),procedure TForm1.FormClick(Sender: TObject); begin rand

31、omize; star(random(50),random(50); end; 可以看到在画图形的时候,先前的那个图形并没有被擦除掉,因而窗体不久就会变得混乱不堪。该怎样来解决这个问题呢?只要在图形显示代码中加入rerfesh方法来刷新图形显示就可以了。,【例9-8】 阴影的制作,主要界面如图9-12所示。,图9-12 阴影的制作,这个按钮就有了一个阴影效果,其实只要根据这个按钮的Top、Left、Width、Height等属性,确定要绘制直线的起点和终点就可以了。 主要的程序代码如下: procedure TForm1.FormPaint(Sender: TObject); var i,m,

32、n:integer; begin,9.1.3 画布对象的方法(9),m:=0; n:=0; form1.Canvas.Pen.Width:=2; for i:=0 to 4 do begin with form1.Canvas do begin pen.Color:=$00a0a0a0; moveto(button1.Left+button1.Width+m,button1.Top+n); /起始点为右上角。 lineto(button1.Left+button1.Width+m,button1.Top+button1. height+n); /终点是右下角。 pen.Color:=$0060

33、6060; moveto(button1.Left+m,button1.Height+button1.Top+n); /起始点为左下角 lineto(button1.Left+button1.Width+m,button1.Height+button1. Top+n); /终点为右下角。 m:=m+1; n:=n+1; end; end;end;,9.2 图像组件的介绍和使用,Shape组件在工具栏Additional中,如图9-13所示。用来绘制简单的几何图形,如矩形、圆、椭圆,等等。,Delphi 7.0为用户提供了图像组件,这一节主要是讲这些组件的使用。,9.2.1 Shape组件,图9

34、-13 Shape 控件,1. Shape组件的属性 Shape组件和Canvas对象一样,主要属性有Brush 画笔属性、Pen 画笔属性、Shape属性。Brush 画笔属性和Pen 画笔属性跟前面讲的差不多,就不在累述了。接下来主要介绍Shape属性。 Shape属性是形状组件最重要的属性,它决定形状组件的形状。取值如表9-5所示。详见本教程P166页。,9.2.1 Shape组件,【例9-9】 Shape组件使用。 在屏幕上放上6个shape组件,然后输入以下代码: procedure TForm1.FormCreate(Sender: TObject); begin shape1.S

35、hape:=stcircle;/圆形 shape1.Pen.Color:=clred;/画笔颜色 shape1.Pen.Style:=psdash;/画笔类型为虚线 shape1.Pen.Width:=3;/画笔粗细 shape1.Brush.Color:=clgreen;/画刷颜色 shape1.Brush.Style:=bscross;/画笔类型为十字交叉 shape2.Shape:=stellipse;/椭圆 shape2.Brush.Style:=bsvertical;/垂直线 shape3.Shape:=strectangle;/矩形 shape4.Shape:=stroundrec

36、t;/圆角矩形 shape5.Shape:=stsquare;/正方形 shape6.Shape:=stroundsquare;/圆角正方形 end; 运行结果如图9-14所示。,图9-14 shape 形状,9.2.2 Image组件(1),图像组件Timage在工具栏Additional中,如图9-15所示。,图9-15 Image 组件,它是一种容器控件,在应用程序的窗体上提供了一个矩形区域。Image对象是建立在Bitmap、Icon、Picture等对象的基础上,用于显示图片(扩展名为.bmp、.ico、.wmf、.jpg的文件)。它的一个重要属性是picture属性,这个属性是调入

37、显示的图片。,【例9-10】 Image组件的使用。这个程序主要实现的功能:单击两个调入按钮来载入不同的图画,也可以单击保存按钮来保存图画。运行时的界面如图9-16所示。,图9-16 Image控件的使用,9.2.2 Image组件(2),1. 主要操作步骤 在form1中放三个Tbutton 组件和一个Timage组件; 分别设置三个Tbtton的Caption属性如图9-16所示。,2. 主要程序代码 procedure TForm1.Button1Click(Sender: TObject); begin image1.Picture.LoadFromFile(C:Program Fil

38、esCommon Files Borland SharedImagesSplash256Colorhandshak.bmp); /调入图像 end; procedure TForm1.Button2Click(Sender: TObject); begin image1.Picture.LoadFromFile(C:Program FilesCommon Files Borland SharedImagesSplash256ColorCHEMICAL.bmp); end; procedure TForm1.Button3Click(Sender: TObject);,9.2.2 Image组件

39、(3),begin image1.Picture.SaveToFile(d:pg.bmp); /用savetofiel方法来保存图像 end;,程序运行过程中调入的图片只能显示出一角,不能显示出整张图片,该怎么来解决这个问题呢?一种方法是:设置Image组件的AutoSize的属性为True,这个Image组件就可以自动调节来适应图像的大小。另一种方法是:设置Image组件的Stretch属性,如果把Stretch属性设置为True,表示图像会自动地放大或者缩小使得和Image组件的大小一样。如果Image的大小发生变化,则图像的大小也随着变化,如果设置为False,则图像会按照原来的大小显示

40、出来。,注意:对于Image组件中的Picture对象,loadfromfile和SaveTofile是最常用的两个方法。,9.2.2 Image组件(4),【例9-11】Autosize属性和Stretch属性,运行界面如图9-17所示。,图9-17 Autosize属性和Stretch属性, 主要的程序代码如下: 在FormCreate中调入图画 procedure TForm1.FormCreate(Sender: TObject); begin image1.Picture.LoadFromFile(C:Program FilesCommon Files Borland SharedI

41、magesSplash256Colorhandshak.bmp); image2.Picture.LoadFromFile(C:Program FilesCommon Files Borland SharedImagesSplash256Colorhandshak.bmp); image3.Picture.LoadFromFile(C:Program FilesCommon Files Borland SharedImagesSplash256Colorhandshak.bmp); end;,9.2.2 Image组件(5),procedure TForm1.CheckBox2Click(Se

42、nder: TObject); begin image2.Stretch:=checkbox2.Checked; /选择checkbox2,把image2的stretch属性设置为true end; procedure TForm1.CheckBox1Click(Sender: TObject); begin image1.AutoSize:=checkbox1.Checked; /选择checkbox1,把image1的autosize属性设置为true; end; 就可以看到图片完整地显示出来了。要注意的是,如果同时设置Autosize和Stretch属性为True,那么先响应Autosi

43、ze的属性。,9.2.3 Paintbox组件(1),Paintbox组件主要提供一个可以用来绘制几何图形的矩形区域,可以使用绘图语句在这个区域内绘制各种图形。Paintbox的绘图方式与Form等其他绘图组件基本上一样,都是通过Canvas对象来完成的。所不同的是绘制的坐标是以Paintbox对象的左上角为原点,而不是以窗体的左上角为原点,且当设定的背景色与Form相同的时候,其运行的结果和在窗体上绘图的效果一样。使用Paintbox组件绘图的一个好处是只需将图形画在Paintbox组件上面,这样就可以避免计算坐标原点了。,画板组件Paintbox在System页中,如图9-18所示。,图9

44、-18 Paintbox组件,【例9-12】输入圆的坐标和半径求圆的面积和周长,如图9-19所示。,图9-19 paintbox组件的使用,9.2.3 Paintbox组件(2),1. 主要步骤 在form1上添加6个Tlabel组件,它们的Caption属性如图9-19所设置。 在form1添加5个Tedit组件,并且把它们的Text属性设置为0。设置edit4,edit5的Readonly属性为True。 在form1中添加一个TPaintbox组件,设置它的Align属性为alLeft。 在form1中添加一个TButton组件,设置它的Caption属性为计算。,2. 主要程序代码 p

45、ublic Public declarations x,y:integer;/定义公共变量,x,y是为了取得Paintbox1的中点 end; var Form1: TForm1; implementation $R *.dfm下面代码是为了画坐标轴 procedure TForm1.FormPaint(Sender: TObject); Var i:integer;/定义I变量是为了控制循环,9.2.3 Paintbox组件(3),begin paintbox1.Canvas.Pen.color:=clblue;/定义画笔颜色 paintbox1.Canvas.Brush.Style:=bs

46、clear; x:=round(paintbox1.ClientWidth/2);/取得x方向的中点 y:=round(paintbox1.ClientHeight/2);/取得y方向的中点 paintbox1.Canvas.MoveTo(x,0); paintbox1.Canvas.LineTo(x,paintbox1.Height);/画y轴 paintbox1.Canvas.MoveTo(0,y); paintbox1.Canvas.LineTo(paintbox1.Width,y);/画x轴 下面的循环是为了输出坐标轴上的坐标和数值 for i:=-15 to 15 do begin

47、if i0 then begin paintbox1.Canvas.Moveto(x+i*20,y); paintbox1.Canvas.LineTo(x+i*20,y-5); /画出x方向上的坐标,乘以20只不过是为了在x方向上的坐标有一些间距。 paintbox1.Canvas.TextOut(x+i*20,y+5,inttostr(i); /画出x方向上的数值 paintbox1.Canvas.MoveTo(x,y+i*20); paintbox1.Canvas.LineTo(x+5,y+i*20); /画出y方向的坐标,9.2.3 Paintbox组件(4),paintbox1.Can

48、vas.Textout(x-15,y+i*20,inttostr(-i); /画出y方向上的数值 end; end; end; 下面的程序段是为了画圆和求出圆的面积和周长 procedure TForm1.Button1Click(Sender: TObject); var c,s:real;/c代表圆周长,s代表圆面积 a,b,r:integer;/a,b代表圆中心,r表示圆半径 begin refresh;/主要是为了去掉上一次所画的圆 a:=strtoint(edit1.Text); b:=strtoint(edit2.Text); r:=strtoint(edit3.Text); pa

49、intbox1.Canvas.Ellipse(x+(a-r)*20,y+(b-r)*20,x+(a+r)*20,y+(b+r)*20); /画出圆 s:=3.14159*r*r; c:=2*3.14159*r; edit4.Text:=floattostr(c); /求出圆周长 edit5.Text:=floattostr(s); /求出圆面积 end;,9.3 使用鼠标绘图(1),鼠标常被用做绘图的工具,应用程序利用鼠标位置的变化来绘制各种不同的图形。鼠标有三个动作:鼠标按钮按下、鼠标移动、鼠标按钮弹起。在Delphi 7.0中,对应三个动作有三个不同的事件:OnMouseDown,OnMouseMove,OnMouseUp。,当Delphi 7.0应用程序探测到一个鼠标动作时,它传递5个参数,并调用相应的事件响应。 程序员可利用这些参数来定义事件程序。5个参数如表9-6所示。详见本教程P172页。,【例9-13】 鼠标事件的应用

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报