1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C+Builder,基本图形编程,薛,涛,西安交通大学计算机教学实验中心,显示图形的最简单办法,Shape,构件可以将简单形体加到窗体上。使用,Shape,构件很容易,只要放到窗体上并根据需要改变,Brush、Pen,和,Shape,属性即可。可以绘制圆、椭圆、矩形、正方形和带圆角的矩形。改变,Brush,属性可以修改形体的背景颜色,改变,Pen,属性可以改变形体边框的颜色或厚度。,显示图形的最简单办法,Image,构件可以在窗体上显示位图,这个构件适合许多图形操作,包括窗体的位图背景。,Image,构件的
2、Picture,属性是,TPicture,类的实例,可以在设计时通过对象观察器选择图形,也可以在运行时装入图形。例如,可以在运行时改变图形如下:,Imagel,-Picture-Bitmap-,LoadFromFile,(,bkgnd,.bmp);,Stretch,属性确定图形可否缩放成适合构件的尺寸。,Center,属性确定位图是否在构件上居中显示。,AutoSize,属性可以迫使构件根据图形尺寸调整尺寸。,显示图形的最简单办法,PaintBox,构件,这个构件提供了画布,可以在窗体的限定区域内绘图。,PaintBox,构件唯一重要的属性是,Canvas,属性,是,TCanvas,类的实例
3、C Builder,应用程序中大多数绘图都是对这个类进行的,TCanvas,类,TCanvas,类的主要属性,属性 说明,Brush,用于填充到形体的画刷颜色或图案,ClipRect,画布的当前剪取矩形,将绘图限制在这个矩形内。这个属性是只读的,CopyMode,确定如何进行绘图(正常、逆向、,xor,,,等等),Font,画布绘制文本所用的字体,Handle,画布的句柄(,HDC),,用于直接调用,Windows API,Pen,确定画布上绘图的线型和颜色,PanPos,当前绘图位置的,x,和,y,坐标,Pixels,画布像素的数组,TCanvas,类,TCanvas,类的主要方法,方法
4、 说明,Arc,当前画笔在画布上画圆弧,BrushCopy,用,透明背景显示位图,CopyRect,将,部分图形复制到画布上,Draw,将内存中的图形复制到画布上,Ellipse,用当前画笔在画布上画椭圆并用当前画刷填充,FloodFill,用,当前画刷填充画布的一个区域,LineTo,从,当前绘图位置向,X、Y,坐标指定的位置画直线,MoveTo,设置当前绘图位置,Pie,在画布上画一个饼形图,Polygon,用一组点在画布上画多边形,并填上当前画刷,TCanvas,类,TCanvas,类的主要方法,方法 说明,Polyline,用,当前画笔用一组点在画布上画折线,不自动闭合,Rectang
5、le,用当前画笔在画布上画矩形外形线,并用当前画刷填充,RoundRect,画,带圆角的填充矩形,StretchDraw,将位图从内存中复制到画布上。位图根据目标矩形的尺寸伸缩,TextExtent,返回传入,Text,参数的字串宽度和高(像素数),宽度用画布当前字体计算,TextHeight,返回传入,Text,参数的字串宽度(像素数),宽度用画布当前字体计算,TextOut,用,当前字体在画布的指定位置上写字,TextRect,在,剪取矩形中写字,在屏幕上绘制蓝边红黑的圆,CanvasBrushColor=,clRed,;,CanvasPenColor=,clBlue,;,CanvasEl
6、lipse(20,20,120,120);,GDI,对象,。最常用的,GDI,对象有画笔、画刷和字体,其它,GDI,对象有调用板、位图和区域。,画笔,画笔定义用于画线的对象。线可以是从一点到另一点的单线,也可以是矩形、椭圆和多边形的边。画笔通过,TCanvas,类的,Pen,属性访问。,Pen,属性是,TPen,类的实例。,TPen,TPen,的属性,属性 说明,Color,设置线的颜色,Handle,画笔的句柄(,HPEN),,用于直接调用,GDI,对象,Mode,确定画线的方法(正常、逆、,xor,,,等 等),Style,笔的样式,实线、点线、划线、点划线、清除,等等,Width,画笔宽
7、度(像素数),下例是画红色划线的代码:,Canvas-Pen-Color=,clRed,;,Canvas-Pen-Style=,psDash,;,Canvas-,MoveTo,(20,20);,Canvas-,LineTo,(120,20);,为了测试这个代码,在窗体上放一个按钮并将代码输入按钮的,OnClick,处理器中。单击按钮时,窗体上即画出一条直线。,提示:为了试验,TPen,的不同属性,可以在窗体上放一个,Shape,构件并修改形体的,Pen,属性,这在检查,TPen,类,Mode,属性的效果时特别方便。,画刷,画刷表示图形形体的填充区。绘制椭圆、矩形和多边形时,形体会用当前画刷填充
8、TCanvas,类的,Brush,属性可以控制画刷的样子。,Brush,属性是,TBrush,类的实例。,TBrush,TBrush,类的属性,属性 说明,Bitmap,用作画刷背景的位图,对于,Windows 95,,位图不得大于8,x8,Color,设置画刷颜色,Handle,画刷句柄(,HBRUSH),,用于直接调用,GDI,Style,画刷样式,包括实心、清除或几种图案之一,缺省情况下,,Style,属性设置为,bsSolid,。,如果要填充图案,则要将,Style,属性设置为几种图案之一(,bsHorizontal,、,bsVertical,、,bsFDiagonal,、,bsB
9、Diagonal,、,bsCross,或,bsDiagCross,)。,下例用45度阴影线在窗体上画圆:,Canvas-Brush-Color=,clBlue,;,Canvas-Brush-Style=,bsDiagCross,;,Canvas-Ellipse(20,20,220,220);,字体,为了改变画布的字体,只要用下列代码:,Canvas-Font-Name=Courier New;,Canvas-Font-Size=14;,Canvas-Font-Style=,fsBold,;,Canvas-,TextOut,(20,20,Testing);,绘制文本,TextOut,和,Text
10、Rect,(),TextOut,(),方法是画布上写字的是最基本方法,只要传入,X,位置、,Y,位置和要显示的文本即可。例如:,Canvas-,TextOut,(20,20,Mason P.,Reisdorph,);,TextRect,(),方法可以指定剪取矩形和显示的文本,这个方法可以将文本限定在指定边界内,边界外的文本均被剪去。下列码段保证显示的文本不超过100像素:,Canvas-,TextRect,(,Rect,(20,50,120,70),20,50,This is a very long line that might get clipped.);,TextOut,(),方法和,T
11、extRect,(),都只能绘制一行文本,不能进行换行。,文本背景,改变文本背景颜色比较容易,这里可以让文本背景颜色与文本颜色相同,做法如下:,Canvas-Brush-Color=Color;,最好能使文本背景透明,方法如下:,TBrushStyle oldStyle,;,oldStyle,=Canvas-Brush-Style;,Canvas-Brush-Style=,bsClear,;,Canvas-,TextOut,(20,20,This is a test.);,Canvas-Brush-Style=,oldStyle,;,首先要保存当前画刷样式,然后将画刷样式设置为透明(,bsClear,)。,显示文本后,要恢复当前画刷样式。,Example,用键盘方向键移动一个圆圈,吹泡泡程序,在窗口中点击鼠标左键,则在点击位置显示一个红色泡泡,修改上题,使得以前显示的泡泡不消失(即仍然可见),修改上题,使得所有显示的泡泡自动向上漂浮直到到达边界,修改上题,使得点击鼠标右键所选中的泡泡消失,划一个折线图,






