1、在写画图软件必然少不了 canvas,可是像我们这样的刚步入程序开发的人们,哪有都懂的,只做一点学一点了。下面是 Canvas 的相关属性。在 Delphi 中,专门定义了一组用于绘制图形的对象和组件,完成一些简单的图像功能。利用这些对象、组件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便设计图形绘制程序。(1)TCanvas,TPen,TBrush,TColor 对象的方法及属性;(2)绘图功能的实现;(3)TImage,TPicture,TBitBtn,TBitmap 组件的方法及属性;(4)图像观测及处理。4.4.1 T
2、Canvas画布对象TCanvas 对象是一个用于绘图的组件,Delphi 利用这个组件为用户提供了一个绘制图形的区域,在这个区域上,程序可实现各种绘图功能,很多组件(如 TImage、TMemo)的 Canvas 属性就是 TCanvas 对象。在组件上绘制图形就是在组件的画布上绘制。TCanvas 的Brush、Pen 、Font 属性分别是 TBrush、TPen、TFont 对象,它们用于定义绘制图形的风格。关于 TBrush、TPen 对象,后面将详细介绍。需要说明的是,Delphi 中利用前缀 T 来标志内部定义的对象,例如 TPen 代表画笔对象,TForm 则代表窗体对象等。画
3、布的笔的位置定义在 PenPos 属性中,可用 MoveTo 方法来移动笔。如果要在画布上输出文本,可用 Textout 方法。TCanvas 对象有很多方法,可完成常用的绘图功能。TCanvas 对象的方法方法 说明Arc Arc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer);Arc 方法在椭圆上画一段弧,椭圆由(x1,y1)、(x2,y2) 两点所确定的椭圆决定。弧的起点是椭圆圆周和椭圆中心与(x3,y3)连线的交点。弧矩形终点是椭圆圆周和椭圆中心与(x4,y4)连线的交点以逆时针方向画弧Chord Chord(x1,y1,x2,yx,x3,y3,x4,y4 : I
4、nteger);Chord 方法连接椭圆上两点,椭圆由(x1,y1)、(x2,y3) 两点所确定的矩形决定,(x3,y3)是始点,(x4,y4)是终点Brushcopy Brushcopy(const Dest : TRect;Bitmap : TBitmap;const Source TRect;Color : TColor);Brushcopy 方法把位图的一部分复制到画布的某个矩形区域,并用画笔的当前颜色替换位图的颜色。参数 Dest 定义画布的一个矩形区域,该矩形用以填充位图,Bitmap 定义位图;Source 定义位图中的矩形区域,该区域上的位图将被复制;Color 定义画笔中用以
5、替换位图的颜色CopyRect CopyRect(Dest:TRect;Canvas:TCanvas; Source TRect);此方法从另一个画布对象上复制部分图像到该画布。Canvas 表示源画布,Source 是源画布上要复制的图像区域。Dest 表示目标画布上将接受复制图像的矩形区域方法 说明Draw Draw(x,y : Integer;Graphic : TGraphic);此方法在画布给定的像素点坐标(x,y)处画 Graphic 所给的图像,该图像可以是位图、图标或元位图Ellips Ellips(x1,y1,x2,y2 : Integer);Ellips 方法在画布指定的矩
6、形边界上画一个椭圆,(x1,y1)是矩形左上角的像素坐标,(x2,y2)是矩形右下角的像素坐标。如果矩形形成一个区域,则将出现一个椭圆LineTo(x,y : Integer);LineToLineTo 从当前位置画一条线至(x,y)所指定的位置,并把笔的位置移至(x ,y)MoveTo MoveTo(x,y : Integer);MoveTo 将笔的当前位置设置到点(x,y)处,笔的当前位置在PenPos 属性中,改变笔的当前位置使用 MoveTo 方法,不要设法改变 PenPos 的值Die Die(x1,y1,x2,y2,x3,y3,x4,y4 : Longint);Die 方法绘制椭圆
7、的一部分,椭圆由点(x1,y1),(x2,y2) 所确定的矩形所决定,绘制的那部分由椭圆中心到(x3,y3)、(x4,y4)两点的两条辐射线所决定Polygon Polygon(Points : array of TPrint);Polygon 方法在画布上绘制一系列的点,各点依次连成线,最后将首尾两点相接形成一个区域,并用当前笔刷填充此区域Polyline Polyline(Ports : array of TPort);Polyline 方法在画布上用当前画笔绘制一系列的点,各点依次连成线StretchDraw StretchDraw(Const Rect : TRcct : Graphi
8、c : TGraphic);此方法在 Rect 参数指定的矩形内画一图像。图像延伸,改变大小以适应矩形Rectangle Rectangle(X1,y1,x2,y2 : Integer);Rectangle 方法在画布上用当前画刷绘制矩形,(x1,y1)是矩形的左上角,(x2,y2)是矩形的右下角DrawFocusRect DrawFocusRect(Const Rect : TRect);此方法绘制一矩形以指示此矩形获得焦点。此方法是XOR(异或)函数,第二次调用时原有矩形将消失。DrawFocusRect 绘制的矩形不能滚动。要实现滚动功能则先调用此方法使矩形消失,待滚动过后重新绘制TPe
9、n画笔对象应用程序常用 TPen 对象在画布上绘制各种线段,笔的颜色在 Color 属性中定义。线段宽度在Width 属性中定义。 1. Style 属性Style 属性定义了线段的各种类型,见表 4.3。表 4.3 Style 属性的取值及含义Style 属性 含义PsSolid 画固定线段PsDash 画由虚线组成的线段PsDot 画由点组成的线段PsDashDot 画点划线PsDashDotDot 画双点划线PsClear 画看不见的线段PsInsideFrame 画边界的矩形线框2. Mode 属性Mode 属性定义线段的颜色。可结合当前的颜色、屏幕颜色或它们的反转值,对线段的颜色重新
10、定义,但不改变 Color 属性,详见表 4.4。表 4.4 Mode 属性的取值及含义Mode 属性 像素颜色PmBlack 黑色PmWhite 白色PmNop 不变PmCopy 使用 Color 属性中的颜色PmNotCopy 笔颜色的反转值PmMergePenNot 笔颜色与屏幕颜色反转值的结合PmNaskNotPen 屏幕颜色与笔颜色的结合PmMergeNotPen 屏幕颜色与笔颜色反转值的结合pmBlack 总是黑色pmWhite 总是白色pmNop 画笔无效pmNot 背景色取反pmCopy 画笔设置的颜色pmNotCopy 画笔颜色取反 pmMergePenNot 画笔颜色与背景
11、颜色的反色的组合 pmMaskPenNot 画笔颜色与背景公共色的反色的组合pmMergeNotPen 画笔颜色取反后与背景颜色的组合 pmMaskNotPen 画笔的反色与背景的公共色的组合pmMerge 画笔颜色与背景颜色的组合pmNotMerge pmMerge 的反色pmMask 画笔与背景公共颜色的组合 pmNotMask pmMask 的反色pmXor 画笔颜色与背景颜色的 Xor 组合pmNotXor pmXor 的反色4.4.3 TBrush画刷对象画刷对象用以填充图形,如用画刷颜色或图案对矩形或椭圆进行填充。TBrush 拥有一个HBrush(画刷句柄)。画刷的颜色定义在 C
12、olor 属性中。画刷还有一个 Bitmap 属性,该属性只能在运行时得到,画刷可使用位图填充图形以产生特殊效果。位图大小为 8 个像素点高, 8 个像素点宽。Style 属性定义了画刷填充图形的图案,如图 4.8 所示为 Style 的取值。取值 图案 取值 图案图 4.8 画刷的类型4.4.4 TColor颜色对象TColor 类型用于定义对象的颜色。很多组件的颜色属性就是 TColor 类型, 在 Graphics 单元中 TColor 定义如下:TColor = -$7FFFFFFF-1$7FFFFFFF;这是一个 32 位二进制数据。 Graphic 单元中还定义了一些常用的颜色常量
13、,这些常量或直接映射成系统调色板中最相近的颜色,或映射成 Windows 控制面板中颜色部分的系统视频颜色。直接映射成系统调色板中的颜色有:ClAqua,CLBlack,ClBlue,ClbkGrray,ClFuchsoa,.,ClYellow映射程序用 4 字节的二进制码来定义颜色,低 3 位字节代表 RGB 相应的颜色,如$00FF0000 表示纯蓝,$0000FF00 表示纯绿,$000000FF 表示纯红,$00000000 表示黑色,$00FFFFFF 表示白色。如果最高位字节是$00,则表示用系统调色板中最相近的颜色;最高位字节是$01,则表示用当前调色板中最相近的颜色匹配;最高位
14、字节是 $02,则表示用当前设备描述表中逻辑调色板的次相近颜色匹配。此外,还有一类颜色,比如:ClBackground,CLActiveCaption,clInactiveCaption,clMenu它们分别表示当前 Windows 桌面的背景色、当前活动窗体的标题栏的颜色、当前非活动窗体的标题栏颜色以及当前菜单的背景色等。用这些颜色属性,可以方便地写出与当前 Windows 相容的应用程序,而不会出现程序在某个 Windows 风格中显得特别扎眼的情况。用 Windows API 的 SelectPalette 函数可创建逻辑调色板,要实现逻辑调色板到硬件调色板的映射,需用 RealizePalette 函数。