TCanvas
2008-03-08 21:51:31 来源:WEB开发网核心提示:TCanvas为作图对象提供一个抽象的画布, 类关系 TObject->TPersistent 对那些作图对象,TCanvas,可使用TCanvas对象作为画布,标准的window控件, ·调用TCanvas方法,使图像发生变化,例如编辑控件和列表框控件,当它们被Windows画出来时
TCanvas为作图对象提供一个抽象的画布。
类关系 TObject->TPersistent
对那些作图对象,可使用TCanvas对象作为画布。标准的window控件,例如编辑控件和列表框控件,当它们被Windows画出来时,并不需要一块画布。在创建一幅图像时,TCanvas对象提供有用的属性、方法和事件,主要通过以下方法:
指定需要使用的刷子、画笔和字体类型。
对各类外形和线条进行作图和填充。
输入文体。
对图像进行着色。
对当前图像的变化能作出反应。
TCanvas有两个子类,即TControlCanvas和TMetafileCanvas,它们对控件图像的作图和创建对象的图元文件图像有所帮助。
属性列表
Brush 决定画布填充图形的背景颜色和填充图案的模式
ClipRect 指定剪贴矩形的边界
CopyMode 确定如何将复制的图像放到画布上面
Font 指定使用文体的字体
Handle 是针对画布的Windows GDI句柄
LockCount 表示画布被锁定的次数
Pen 指定使用的画笔种类
PenPos 指定画笔当前的作图位置
Pixels 指定当前CliPRect中点的颜色
方法列表
~TCanvas 释放TCanvas占用的内存
Arc 在图片上画出一段弧线
BrushCopy 制位图的一部分到位于画布上的矩形中
Chord 画一个由一条直线和一个椭圆相交所的的闭合图形
CopyRect 将另一画布上图形的一部分复制到这个画布上
Draw 在画布上输出由Graphic参数指定的图像
DrawFocusRect 画一个矩形框表示矩形内的控件对象具有输入焦点
Ellipse 在画布上画椭圆
FillRect 使用当前刷子填充画布上指定的矩形
FloodFill 使用当前刷子填充画布上的一块区域
FraneRect 画出一个矩形的边框
LineTo 在画布上画一条从当前画笔位置到指定点(x, y)的直线
Lock 使其他线条不在画布上画出
MoveTo 使当前作图位置移到点(x, y)
Pie 在画布上画一个扇形
PolyBezier 画一簇Bezier曲线
PolyBezierTo 画一簇Bezier曲线并更新PenPos的值
Polygon 在画布上画出闭合图形
Polyine 在画布上画出一系列链接点数组中的每一个点的直线
Rectangle 在画布上画出一个矩形
Refresh 从设备场境里删除 Pen、Brush 以及 Font
RoundRect 在画布上画出一园角的矩形
StretchDraw 画出由 raphic 参数指定的图像
TCanvas 创建一介 TCanvas 对象的实例
TextExtent 返回字符串的像素宽度和高度
TextHeight 返回字符串的像素高度
TextOut 在画布上从点(x,y)处开始输出一字符串
TextRect 在剪切矩形区内输出字符串
TextWidth 返回字符串的像素宽度
TryLock 调用TryLock 将锁定画布
Unlock 使LockCount 属性值减少
事件列表
OnChange 当画布上的图像刚发生变化时OnChange事件发生
OnChanging 当画布上的图像刚发生变化时OnChanging事件发生
属性
TCanvas::Brush
决定画布填充图形的背景颜色和填充图案模式。
__property TBrush* Brush = { read =FBrush, write =SetBrush };
通过设置 Brush属性的属性,指定作图背景颜色和填充图案的模式。Brush 属性值为TBrush 对象。当在画布上填充一个空间时,通过设置TBrush 对象的属性,可以指定可以使用的颜色、模式或者位图。
注重:设置Brush 属性是为分配指定的TBrush 对象,而不是替代当前的 TBrush 对象。
TCanvas:::ClipRect
指定剪贴矩形的边界。
__property Windows:::TRect ClipRect = {read =GetClipRect };
使用ClipRect权属性用来限定画布的作图区域。任何坐标在ClipRect 属性以外的作图将被剪切掉并且不会出现在图像中,例如,在一个较小的框中画一个大圆的一部分,首先画框,然后对由框的内边界限定的矩形进行ClipRect属性设置 。此时,画整个圆将显示在框内部分。
当处理窗体的OnPaint 事件时,画布的ClipRect 属性被设置成所需着色的矩形。不与ClipRect 重叠的图像部分,不必画出。因此,OnPaint 例程能够使用 ClipRect 属性的数值,对着色进行优化,并加速应用软件的全面运行。
TCanvas::CopyMode
确定如何将复制的图像放到画布上面。
__property int Copy Mide = {read = FCopyMode, write = FCopyMode, default = 13369376 };
设置copyMode属性,可以改变画出的图像到画布上面的路径。当使用CpyReet 方法从另外的画布上复制图像时,使用CopyMode属性。当TBitmap 对象画它们自身到一个画布上时,CopyNode属性还被TBitmap对象使用。
下表给出了CopyMode属性可能的取值,并对每一取值进行了描述。
取值 说 明
cmBlackness 用黑色填充画布的矩形目标
cmDstInvert 忽略源图,将画布上的图像反转
cmMergeCopy 将画布上的图像与源位图进行AND操作
cmMergePaint 将画布上的图像与反转的源位图进行OR操作
cmNotSrcCopy 复制反转的源位图与画布
cmNotSrcErsae 将画布上的图像与源位图进行OR操作,然后再反转
cmPatCopy 复制源式样至画布
cmPatInvert 将画布上的图像与源式样进行XOR操作
cmPatPaint 使用OR操作使反转的源位图与源式样结合,并将操作结果与画布上的图像进行OR操作
cmSsrcAnd 将画布上的图像与源位图进行AND操作
cmSrcCopy 复制源位图至画布
cmSrcErase 将画布上的图像进行反转,然后将其与源位图进行XOR操作
cmSrcInvert 将画布上的图像与源位图进行OR操作
cmWhiteness 用白色填充画布上的矩形目标
TCanvas::Font
当在图像上写的文本时,使用Font属性指定使用文本的字体
__property TFont* Font = { read = FFont, write = SetFont } ;
对图像上的文本,使用Font属性可以指定使用文本的字体。Font 属性的数值是TRont 对象。设置TFont对象的属性,可以指定使用字体的外观、颜色、大小以及风格等。
注重:仅对指定TFont对象的 Font 属性进行指定,而不是替代当前的TFont对象。
TCanvas::HandIe
是针对画布的Windows GDI句柄。
__property HDC HandIe = { read = GetHandIe write = SetHandIe ,nodefauIt } ;
对于卷入画布的设备场境,必须设置HDC 的Handle 属性。当窗口控件对Windows 着色信息进行响应时,绘图所需的HDC 即转化为PrtDeviceContext 方法 。在其他情况下,通过调用控件的GetDeviceContext方法,也能获得HDC。此外,对打印机或者存储器,Windows 还提供了能够获得HDC的API调用方法。
读Handle 属性可以对由使用需要设备场境句柄的进行API调用的TCanvas 对象提供绘图设备进行补充。绝大多数的Windows GDI调用,需要HDC。
TCancas对象没有自己的HDC。应用软件必须建立一个HDC,并对Handle 属性进行设置。当画布不再需要时,应用软件应释放HDC。对已有效一个有HDC画布,进行Handle属性进行设置时,将不能自动释放初始的HDC。
注重:TCanvas 对象的一些字体,如TControlCanvas , 有其自己的HDC。不要为这些对象设置Handle属性。它们使用并释放自己的Handle属性。
TCanvas::LocKcount
表示画布被锁定的次数,以避免与其他线条相冲突。
__properrty int LockCount = {read = FLockCount,nodefault }:
读LockCount属性可以查明画布是否被锁定。每当调用Lock方法防止画布与其他线条相冲突时,LockCount属性增加。调用Unlock方法时,LockCount 属性减少。当LockCount属性为0时,其他线条可以在画布上画出。
TCanvas::Pen
指定画布为画线和画图形轮廓而使用的画笔种类。
__property TPen * Pen + {read = FPen, write =SetPen };
在一幅图像中,设置Pen 属性可指定画线和画图形轮廓而使用的画笔种类。Pen属性的数值是TPen对象。设置TPeb对象的属性,可以指定画笔的颜色、风格、宽度以及样式等。
注重:仅对指定TPen 对象的Pen属性进行设置,而不是替代当前的TPen对象。
TCanvas::PenPos
用来指定画笔当前的作图位置。
__property tag POINT penPos = {read = GetPenPos , write = SetPos },
读 PernPos 可以知道画笔当前的傻图位置。它是用 LineTo 方法作图的起始点位置。设置 PenPos 属性相当于调用 MoveTo 方法 。
TCanvas::Pixels
指定当前 ClipRect是中点颜色。
__property TColor Tixels [ int Y ] = { read = Get Pixel , write = SetPixe } ';
读取Tixels 读属性可以知道位于具体像素位置的画面颜色。写Pixels属性可以改变画面上某个特定像素的颜色。使用Pixels 属性可以细化图像效果。Pixels 属性还可以用于确定被FillRect方法使用的颜色。
不是每一个设备场境都支持Pixels属性。这样的设备场境,读出的Pixels属性返回值为--- 1。则对这样的设备场境进行Pixels 属性设置是没有用的。
注重: Pixels属性仅对位于当前Cliprect 数值内的像素有效。
方法
TCanvas::~TCanvas
删除一个TCanvas的实例。
__fastcall virtual ~ TCanvas(void);
在应用程序中,不要直接调用~TCanvas,而应调用delete。
~TCanvas首先释放为Font、Brush和Pen属性创建的TFont、TBrush和TPen对象。然后再释放TCanvas对象的内存。
TCanvas::Arc
沿由指定矩形确定的椭圆的边,可以在图片上画出一段孤线。
void __fastcall Arc{int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4};
使用Arc过程,用当前画笔画一个椭圆形曲线。弧线横跨以点(x1, y1)和点(x2, y2)为边界的椭圆边。根据椭圆形周长,按照逆时针方向,从起始点至结束点画出弧线。起始点为椭圆中心和点(x3, y3)确定的直线与椭圆的交点。结束点为椭圆中心和点(x4, y4)确定的直线与椭圆的交点。注重:在Windows95中,x1+x2的和,以及y1+y2的和,不能超出32768。而且,x1+x2+y1+y2的和也不能超出32768。在Windows NT中,使用Windows API调用SetrcDirection方法,画弧线的方向可以改变为顺时针方向。
TCanvas::BrushCopy
复制位图的一部分到位于画布上的矩形中,并且用画布刷子的颜色替代图像的颜色。
void__fastcall BrushCopy(const Windows::TRect & Dest, TBitmap * Bitmap, const Windows::TRect & Source, Tcolor color);
使用BrushCopy可以获得诸如使复制图片部分透明这样的非凡效果。BrushCopy过程具有向后兼容性能。使用TImageList方法可以替代BrushCopy过程。为了使运用BrushCopy过程复制出来的图片具有部分透明效果,应当指定画布表面的颜色(如clBackground)作为Brush属性的Color参数,然后调用BrushCopy过程。
TCanvas::Chord
画一个由一条直线和一个椭圆相交,所构成的闭合图形。
void__fastcall Chord (int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4);
使用Chord可以创建一个由弧形及链接弧形两个端点的直线所构成 的图形。弦是椭圆以点(x1,y1)和点(x2,y2)为边界的一部分。椭圆被点(x3,y3)和点(x4,y4)之间的一条直线分割成两部分。
弦的边从点(x3,y3)开始,按逆时针方向沿椭圆运行到点(x4,y4),最后一直回到点(x3,y3).假如点(x3,y3)和点(x4,y4),不在椭圆表面上,相应的弦的拐点,取在椭圆边上截断直线最接近的点。使用Pen属性数值可以画出弦的轮廓,使用Brush属性数值可以对图形进行填充。在Windows95中,x1+x2的和,以及y1+y2的和,不能超出32 768。而且,x1+x2+y1+y2的和也不能超出32 768。在Windows NT中,使用Windows API调用SetArcDirection方法,画弦的方向可以改变为顺时针方向。
TCanvas::CopyRect
将另一个画布上图形的一部分复制到这个画布上。
void__fastcall CopyRect (const Windows::TRect& Dest, TCanvas* Canvas, const Windows::TRect & Source);
使用CopyRect过程,可以将另一个画布上图形的一部分,转移到TCanvas对象的图片上。Dest参数,指定了将要复制的源图形存放在画布上的矩形区域。Canvas参数指定与源图像相关的画布。Source参数指定将要复制的源画布部分的矩形区域。源画布部分,通过使用CopyMode方法的指定模式来进行复制。
TCanvas::Draw
在给出的坐标(X,Y)位置处,Draw在画布上输出由Graphic参数指定的图像。
void __fastcall Draw(int X, int Y, TGraphic* Graphic);
调用Draw可以在画布上画出一个图像。Draw调用图形的Draw方法。图片输出到一个图形大小确定、左上角位于点(X,Y)处的矩形区域。
图像可以是点位图、图标或者图元文件。假如图像是一个Bitmap对象,点位图通过使用CopyMode方法的数值输出。
TCanvas::DrawFocusRect
画一个矩形框,通常用于表示矩形内的控件对象具有输入焦点。
void __fastcall DrawFocusRect( const Windows::TRect &Rect ) ;
当控件获得或失去输入焦点时,调用DrawFocusRect可以画出控件图片的边框。因为DrawFocusRect使用XOR功能,因此,当第二次调用drawFocusRect时,相同的矩形框将从屏幕上消失。
使用DrawFocusRect 画了出的矩形框,为能进行滚动。为了滚动由DrawFocusRect 画出的包含矩形框的区域,首先调用DrawFocusRect ,从屏幕上移去矩形框,滚动该区域,然后再调用drawFocusRect , 在新位置上画出矩形框。
TCamvas::Ellipse
在画布上的矩形范围内画椭圆。
void __fastcall Ellipse (int X1,int Y1,int X2,int Y2 );
调用Ellipse过程,可以在画布画圆或者椭圆。矩形范围的左上点位于像素坐标(x1,y1).矩形范围的右下点位于像素坐标 (x2,y2).。假如矩形窗体有所有点构成一个正方形,则将画出圆形。使用Pen属性的数值,可以画出椭圆轮廓;作用Brush属性的数值,可以对椭圆进行填充。
注重: 在Windows95中,x1 + x2 的和,以及 y1 +y2 的和,不能超出32768。而且,x1 +x2 +y1 +y2的和也不能超出32768。
TCanvas::fillRect
使用当前刷子填充画布上指定的矩形。
void__fastcall Rloodfill (int X, int Y ,TColor Color,TFillStyle FillStylr ) ;
使用Brush属性的数值,调用FloodFill 过程对可以一个非矩形区域进行填充,被填充区域的边界,从点(x,y,) 开始向外扩充,直到碰到Color参数指定的颜色边界为止。
FillStyle参数,确定了边界颜色变化类型,用下表进行表示。
数值 说明
fsSurface 填充所有由Color参数指定的颜色区域。当碰到另一种颜色时停止
fsBorder 填充所有由非Color参数指定的颜色区域。当碰到Color 参数指定的颜色边界时停止
当使用FillStyle参数为fsSurface的FloodFill过程时,使用Pixels属性可以获得位于点( x ,y )处的颜色的确切数值,类似地,当使用FillStyle参数为faBorder的FloodFill过程时,假如直到边界上的点,则使用Pixels属性可以获得边界颜色的确切数值。
TCanvas::FrameRect
使用画布的Brush属性,画出一个矩形的边框。
void__fastcall framsRect ( const Windows ::TRect &Rect ) ;
使用FrameRect可以画出一个像素宽的矩形区域有边界。FrameRect过程对矩形内部不用Brush属性进行填充。
通常,使用Polygon方法画一条边线,而不使用Pen方法 。
TCanvas ::LineTo
在画布上画开条从当前画笔位置到指定点(x,y)的直线,并且将画笔位置设置为点(x,y)。
void __fastcall LineTo (int X ,int Y);
使用LineTo可以画一条从当前画笔位置到指定点(x,y)的直线,但不包括点 (x,y)。 LineTo 将画笔位置设置为点(x,y)。
TCanvas::Lock
可以使其他线条不在画布上画出。
void __ fastcall Lock(void );
在需要画多条线条的应用程序中,调用Lock过程可以使其他线条不在画布上画出。除非调用了UnLock方法,否则Lock过程可以使应用程序中的所有其他线条不会画出,嵌套调用Lock, 使LockCount属性增加,以致使画布上进行作图,除非最后一个锁定被释放。
由于Lock可以使所有其他线条不会画出,因此Lock对执行情况具有负影响,除非存在其他线条可能妨碍再画布上进行作图,则不要调用Lock 。
TCanvas::MoveTo
使用当前作图位置移到点(x,y).
void __ fastrall MoveTo ( int X , int Y ) ;
在调用LineTo之前,使用MoveTo可以对画笔位置数值进行设定。调用MoveTo的作用与设定画笔位置属性的作用相同。
TCamvas::Pie
用来在画布上画一个扇形椭圆的一部分,扇形的边界为点(x1,y1)和点(x2,y2)确定的矩形的椭圆。
void__fastcall Pie (int X1,int Y1,int X2,int Y2,int X3,int Y3,int X4,int Y4 );
使用Pie 可以画一个扇形。扇形的边界为点(x1,y1)和点(x2,y2)确定的矩形的椭圆。画出的椭圆部分由椭圆中心向外辐射的经过点(x3,y3)和点(x4,Y4)的两条直线所确定。
使用Pen属性的数值,可以画出扇形轮廓;使用Brush 属性的数值,可以对扇形进行填充。
注重:在windows95中,x1+x2 的和,以及y1+y2的和,不能超出32 768 。而且,x1+x2+y1+y2的和也不能超过32768。
TCanvas::PolyBezier
画一簇Bezier曲线。
void __fastcall PolyBezier (const tagPOINT* Points,const int Points_Size );
PolyBezier用于根据 Points参数指定的控制点画三次Bezier曲线。其中第一条曲线经过第一、第四点。2、3点为控制点。按顺序,每条曲线需至少四个点;上一曲线的终点为下一曲线的开始点,紧接着的两个点为控制点,第四点为终点。画线时使用当前的笔。
可以使用Sice函数把点数组传给PolyBezierTo方法。例如,把100 个点的前10个点画成一条Bezier曲线,使用方法如下:
Canvas::PolyBezier(Slice(PointArray,10));
TPanvas::PolyBezierTo
画一簇Bezier曲线并更新PenPos的值。
void__fastcall PolyBezierPo(const tagPOINT* Points ,const inty Points_Size );
PolyBezierTo 用于根据 Points 参数指定的控制点画三次 Bezier 曲线 。其中第一条曲线经过第一、第四点,2、3点为控制点。按顺序,每条曲线需至少四个点;上一曲线的终点为下一曲线的开始点,紧接着的两个点为控制点,第四点为终点。画线时使用当前的笔并把 PenPos 更新为最后一个点的值。
可以使用Slice函数把点数组传给PokybezierTo方法。例如,把100个点的数组的前10个画成一条Brzier曲线,使用方法如下:
Canvas::PolyBezierTo(Slice(PointArray,10));
TCanvas::Polygon
在画布上画出链接所有点的一系列直线,并且画出一条从最后一点到起始点的直线以闭合图形。
void __fastcall Polygon( const tagPOINT* Plints const int Points_Size ) ;
使用Polygon, 通过画笔可以在画布上画出一个闭合的多边形。画出完整图形之后,Polygon 还用Brush属性的数值自动填充图形。当需要画一个多边形而又不需要填充时,可以调用Polyline方法,只需要结尾处第二次指定起始点即可。
使用Slice函数,可以将点数组的一部分传递给Polygon 方法。例如 ,以100个点的数组中的开始 10 个点画出一个多边形,可以像以下方法使用Slice函数:
Canvas::Polygon::(Slice(PointAeeay,10)。
TCanvas ::Polyline
以当前画笔在画布上画出一系列链接点数组中的每一个点的直线。
void __fastcall Polyline(const tagPOINT* Points.const int Points_Size ) ;
使用 Pilyline 可以在画布上链接一系列的点。假如仅有两个点,Polyline仅画出一条直线。调用MoveTo 功能,将画笔位置移到第一个点,然后用后面所有的点重复调用 LineTo,可以在画布上画出与调用 Pokyline 一样的图形。然而,与 LineToi不同的是,Polyine过程不能改变画笔位置数值。
使用Slice函数,可以将点数组的一部分传递给Polyline方法。例如,为了链接100个点数组中的开始10个点,可按以下方法使用Slice函数:
Canvas::Polyine::(Slice(PointArray,10).
TCanvas::Rectangle
可以在画布上画出一个矩形,矩形的左上角为点(x1, y1) ,右下角为点(x2, y2)。
void__fastcall Rectangle(int X1, int Y1, int X2, int Y2, );
调用Rectangle过程,使用画笔画出一个矩形,并且用刷子进行填充。如要填充一个矩形区域而又不需用当前画笔画出边线时,应使用FillRect方法。假如需要没有填充的矩形区域轮廓,应使用FrameRect方法或者Polygon方法。假如需要画出一个圆角的矩形,应使用RoundRect方法。
TCanvas::Refresh
从设备场境里删除Pen、Brush以及Font。
void__fastcall Refresh (void);
调用Refresh可以使画布使用的HDC回到缺省状态。Refresh不会改变Pen属性、Brush属性以及Font属性的数值。调用Refresh后,假如HDC是被作图方法使用的话,那么任何作图方法的调用,将需要为HDC重新选择Brush、Font或者Pen。
TCanvas::RoundRect
可以在画布上画出一个圆角的矩形。
void__fastcall RoundRect (int X1, int Y1, int X2, int Y2, int X3, int Y3);
调用RoundRect可以使用画笔画出一个圆角的矩形,并且用刷子进行填充。矩形的边由点(x1, y1)、点(x2,y1)、点(x2,y2)和点(x1,y2)确定。矩形的角被修剪以形成圆的外观。画一个椭圆,使用Ellipse方法。画一个真正的矩形,使用Rectangle方法。
TCanvas::StretchDraw
在由Rect参数指定的矩形区域内,画出由Graphic参数指定的图像。
void __fastcall StretchDraw (const Windows::TRect& Rect, TGraphic* Graphic);
调用StretchDraw在画布上画出一个图像,以便使图像与指定的矩形区域相适应。StretchDraw过程调用图像的Draw方法。图像决定了如何使图像与矩形区域相适应。这可能包括放大或者缩小比例。为了使图像能够按其原先尺寸画出,应使用Draw方法。 图像可以是点位图、图标或者位图文件。假如图像是TBitmap对象,点位图使用CopyMode属性的数值画出。
TCanvas::TCanvas
创建一个TCanvas对象的实例。
__fastcall TCanvas(void);
不要直接调用TCanvas构造函数,用new来实例化一个TCanvas对象。 TCanvas为TCanvas的实例分配内存,并且为Font、Brush和Pen属性创建TFont、TBrush和TPen对象。TCanvas还将CopyMode方法初始化为cmSrcCopy。
TCanvas::TextExtent
返回以当前字体表示的字符串的像素宽度和像素高度。
tagSIZE __fastcall TextExtent(const System::AnsiString Text) ;
使用TextExtent 可以确定字符串在图片上占用的空间。在图片上的诸如线条、框架以及文本的附加线等单元被放在适当的位置,以容纳文本大小。仅检查文本高度,调用 TextHeight 方法。仅检查文本的宽度,调用TextWidth方法。
TCanvas::TextHeight
返回以当前字体表示的字符串的像素高度。
int __fastcall TextHeight(const system::AnsiString Text );
使用TextHeight可以确定字符串在图片上占用的高度。在图片上的诸如线条、框架以及文本的附加线等单元被放在适当的位置,以容纳文本的高度。TextHeight 函数返回与TextExtent(Text )::cy 相同的数值。
TCanvas::TextOut
在画布上从点(x,y)处开始输出一个字符串,同时将画笔位置修改为字符串的结束位置。
void __fastcsll TextOut( int X, int Y, const System::AnsiString text ) ;
使用TextOut 可以向画布上输出一个字符串。按字体的当前数值输出字符串。使用 TextExtent 能够确定出文本在图片上的占用空间。为了输出仅与剪切矩形区域相适应的文本,应使用权TextRect 方法 。
TCanvas::TextRect
在一个剪切矩形区域内输出一个字符串。
void __fastcall TextRect(const Windows::TEect& Rect,int X,int Y,const System::AnsiString Text);
使用TextRect可以在一个限制的矩形区域内输出一个字符串。字符串落在由Rect 参数指定的矩形区域外的任何部分将被剪切且不显示。文本的左上角位于点(X,Y) 。
TCanvas::TextWidth
返回以当前字体表示的字符串的像素宽度。
int __fastcall TextWidth(const system::AnsiString Text);
使用TExtWidth 可以确定字符串在图片上占用的长度。TextWidth 函数表明给出的字符串是否与可用空间相适应。在图片上的诸如线条、框架以及文本有附加线等单元被放在适当的位置,以容纳文本的宽度,Textwidth返回与TextExtent(Text)::cx相同的数值。
TCanvas::TryLock(void);
除非调用了 UnLock 方法,否则调用 TryLock 可以避免其他线条在画布表面上输出。调用Lock方法需要配套使用,每调用一次 Lock 方法必须一后面调用 UnLock 方法相匹配。假如画布没有锁定,那么对TryLock函数的调用仅需与调用一次UnLock方法相匹配。假如画布是开启的,调用TryLock函数将锁守画布,将LockCount 属性值设为1、返回True 值。假如画布被锁定,调用TryLock 函数不产生任何变化,返回False值。
在试图改变画布之前,调用 TryLock 函数可能妨碍由 Lock 和 UnLock 平共处成对调用方法保护的其他代码的执行。
TCancas::__fastcall Unlock(void);
使 LockCount 属性值减少,并且答应其他线条输出直至LockCount属性值为0。
void __fastcall UnLock(void) ;
在以调用 Lock 方法开始的临界区的结尾处调用 UnLock 过程。每一个对 Lock方法的调用,必须与调用 UnLock 方法相匹配。
TCanvas::OnChange
当画布上的图像刚发生变化时,OnChange事件发生。
__property Classes::TNotifyEvent OnChange = {read =FOnChange, write = FOnChange };
每当画布上的图像发生变化时,写OnChange事件处理程序以执行特定的行为。应用程序调用TCanvas对象的一个作图方法时,引起下列变化:
·产生一个OnChanging事件。
·调用TCanvas方法,使图像发生变化。
·产生一个OnChange事件。
OnChange事件是在图像产生变化时产生,而不是画布属性产生变化时产生。应用程序中对Font属性Brush属性和Pen属性的变化,可以通过设定OnChange事件处理程序以产生相应的TFont对象、TBrush 对象和TPen对象。然而,TCanvas对象为这些对象设定了其自身的OnChange事件处理程序。在指定这些对象的OnChange事件处理程序之前,首先读出现在的事件处理程序。使用读出的数值。从新事件处理程序调用TCanvas对象的事件处理程序。
TCanvas ::OnChanging
当画布上的图像刚要发生变化时,OnChanging事件发生。
__propenty CIasses::TNotifyEvent OnChanging = {read =FOnChanging, write = RonXhanging};
在画布上的图像发生变化之前,写OnChanging事件处理程序以执行特定的行为。当应用程序调用TCanvas对象的一个作图方法时,引起下列变化:
·一个OnChanging事件发生。
·调用TCanvas方法,使图像发生变化。
·一个OnChange事件发生。
类关系 TObject->TPersistent
对那些作图对象,可使用TCanvas对象作为画布。标准的window控件,例如编辑控件和列表框控件,当它们被Windows画出来时,并不需要一块画布。在创建一幅图像时,TCanvas对象提供有用的属性、方法和事件,主要通过以下方法:
指定需要使用的刷子、画笔和字体类型。
对各类外形和线条进行作图和填充。
输入文体。
对图像进行着色。
对当前图像的变化能作出反应。
TCanvas有两个子类,即TControlCanvas和TMetafileCanvas,它们对控件图像的作图和创建对象的图元文件图像有所帮助。
属性列表
Brush 决定画布填充图形的背景颜色和填充图案的模式
ClipRect 指定剪贴矩形的边界
CopyMode 确定如何将复制的图像放到画布上面
Font 指定使用文体的字体
Handle 是针对画布的Windows GDI句柄
LockCount 表示画布被锁定的次数
Pen 指定使用的画笔种类
PenPos 指定画笔当前的作图位置
Pixels 指定当前CliPRect中点的颜色
方法列表
~TCanvas 释放TCanvas占用的内存
Arc 在图片上画出一段弧线
BrushCopy 制位图的一部分到位于画布上的矩形中
Chord 画一个由一条直线和一个椭圆相交所的的闭合图形
CopyRect 将另一画布上图形的一部分复制到这个画布上
Draw 在画布上输出由Graphic参数指定的图像
DrawFocusRect 画一个矩形框表示矩形内的控件对象具有输入焦点
Ellipse 在画布上画椭圆
FillRect 使用当前刷子填充画布上指定的矩形
FloodFill 使用当前刷子填充画布上的一块区域
FraneRect 画出一个矩形的边框
LineTo 在画布上画一条从当前画笔位置到指定点(x, y)的直线
Lock 使其他线条不在画布上画出
MoveTo 使当前作图位置移到点(x, y)
Pie 在画布上画一个扇形
PolyBezier 画一簇Bezier曲线
PolyBezierTo 画一簇Bezier曲线并更新PenPos的值
Polygon 在画布上画出闭合图形
Polyine 在画布上画出一系列链接点数组中的每一个点的直线
Rectangle 在画布上画出一个矩形
Refresh 从设备场境里删除 Pen、Brush 以及 Font
RoundRect 在画布上画出一园角的矩形
StretchDraw 画出由 raphic 参数指定的图像
TCanvas 创建一介 TCanvas 对象的实例
TextExtent 返回字符串的像素宽度和高度
TextHeight 返回字符串的像素高度
TextOut 在画布上从点(x,y)处开始输出一字符串
TextRect 在剪切矩形区内输出字符串
TextWidth 返回字符串的像素宽度
TryLock 调用TryLock 将锁定画布
Unlock 使LockCount 属性值减少
事件列表
OnChange 当画布上的图像刚发生变化时OnChange事件发生
OnChanging 当画布上的图像刚发生变化时OnChanging事件发生
属性
TCanvas::Brush
决定画布填充图形的背景颜色和填充图案模式。
__property TBrush* Brush = { read =FBrush, write =SetBrush };
通过设置 Brush属性的属性,指定作图背景颜色和填充图案的模式。Brush 属性值为TBrush 对象。当在画布上填充一个空间时,通过设置TBrush 对象的属性,可以指定可以使用的颜色、模式或者位图。
注重:设置Brush 属性是为分配指定的TBrush 对象,而不是替代当前的 TBrush 对象。
TCanvas:::ClipRect
指定剪贴矩形的边界。
__property Windows:::TRect ClipRect = {read =GetClipRect };
使用ClipRect权属性用来限定画布的作图区域。任何坐标在ClipRect 属性以外的作图将被剪切掉并且不会出现在图像中,例如,在一个较小的框中画一个大圆的一部分,首先画框,然后对由框的内边界限定的矩形进行ClipRect属性设置 。此时,画整个圆将显示在框内部分。
当处理窗体的OnPaint 事件时,画布的ClipRect 属性被设置成所需着色的矩形。不与ClipRect 重叠的图像部分,不必画出。因此,OnPaint 例程能够使用 ClipRect 属性的数值,对着色进行优化,并加速应用软件的全面运行。
TCanvas::CopyMode
确定如何将复制的图像放到画布上面。
__property int Copy Mide = {read = FCopyMode, write = FCopyMode, default = 13369376 };
设置copyMode属性,可以改变画出的图像到画布上面的路径。当使用CpyReet 方法从另外的画布上复制图像时,使用CopyMode属性。当TBitmap 对象画它们自身到一个画布上时,CopyNode属性还被TBitmap对象使用。
下表给出了CopyMode属性可能的取值,并对每一取值进行了描述。
取值 说 明
cmBlackness 用黑色填充画布的矩形目标
cmDstInvert 忽略源图,将画布上的图像反转
cmMergeCopy 将画布上的图像与源位图进行AND操作
cmMergePaint 将画布上的图像与反转的源位图进行OR操作
cmNotSrcCopy 复制反转的源位图与画布
cmNotSrcErsae 将画布上的图像与源位图进行OR操作,然后再反转
cmPatCopy 复制源式样至画布
cmPatInvert 将画布上的图像与源式样进行XOR操作
cmPatPaint 使用OR操作使反转的源位图与源式样结合,并将操作结果与画布上的图像进行OR操作
cmSsrcAnd 将画布上的图像与源位图进行AND操作
cmSrcCopy 复制源位图至画布
cmSrcErase 将画布上的图像进行反转,然后将其与源位图进行XOR操作
cmSrcInvert 将画布上的图像与源位图进行OR操作
cmWhiteness 用白色填充画布上的矩形目标
TCanvas::Font
当在图像上写的文本时,使用Font属性指定使用文本的字体
__property TFont* Font = { read = FFont, write = SetFont } ;
对图像上的文本,使用Font属性可以指定使用文本的字体。Font 属性的数值是TRont 对象。设置TFont对象的属性,可以指定使用字体的外观、颜色、大小以及风格等。
注重:仅对指定TFont对象的 Font 属性进行指定,而不是替代当前的TFont对象。
TCanvas::HandIe
是针对画布的Windows GDI句柄。
__property HDC HandIe = { read = GetHandIe write = SetHandIe ,nodefauIt } ;
对于卷入画布的设备场境,必须设置HDC 的Handle 属性。当窗口控件对Windows 着色信息进行响应时,绘图所需的HDC 即转化为PrtDeviceContext 方法 。在其他情况下,通过调用控件的GetDeviceContext方法,也能获得HDC。此外,对打印机或者存储器,Windows 还提供了能够获得HDC的API调用方法。
读Handle 属性可以对由使用需要设备场境句柄的进行API调用的TCanvas 对象提供绘图设备进行补充。绝大多数的Windows GDI调用,需要HDC。
TCancas对象没有自己的HDC。应用软件必须建立一个HDC,并对Handle 属性进行设置。当画布不再需要时,应用软件应释放HDC。对已有效一个有HDC画布,进行Handle属性进行设置时,将不能自动释放初始的HDC。
注重:TCanvas 对象的一些字体,如TControlCanvas , 有其自己的HDC。不要为这些对象设置Handle属性。它们使用并释放自己的Handle属性。
TCanvas::LocKcount
表示画布被锁定的次数,以避免与其他线条相冲突。
__properrty int LockCount = {read = FLockCount,nodefault }:
读LockCount属性可以查明画布是否被锁定。每当调用Lock方法防止画布与其他线条相冲突时,LockCount属性增加。调用Unlock方法时,LockCount 属性减少。当LockCount属性为0时,其他线条可以在画布上画出。
TCanvas::Pen
指定画布为画线和画图形轮廓而使用的画笔种类。
__property TPen * Pen + {read = FPen, write =SetPen };
在一幅图像中,设置Pen 属性可指定画线和画图形轮廓而使用的画笔种类。Pen属性的数值是TPen对象。设置TPeb对象的属性,可以指定画笔的颜色、风格、宽度以及样式等。
注重:仅对指定TPen 对象的Pen属性进行设置,而不是替代当前的TPen对象。
TCanvas::PenPos
用来指定画笔当前的作图位置。
__property tag POINT penPos = {read = GetPenPos , write = SetPos },
读 PernPos 可以知道画笔当前的傻图位置。它是用 LineTo 方法作图的起始点位置。设置 PenPos 属性相当于调用 MoveTo 方法 。
TCanvas::Pixels
指定当前 ClipRect是中点颜色。
__property TColor Tixels [ int Y ] = { read = Get Pixel , write = SetPixe } ';
读取Tixels 读属性可以知道位于具体像素位置的画面颜色。写Pixels属性可以改变画面上某个特定像素的颜色。使用Pixels 属性可以细化图像效果。Pixels 属性还可以用于确定被FillRect方法使用的颜色。
不是每一个设备场境都支持Pixels属性。这样的设备场境,读出的Pixels属性返回值为--- 1。则对这样的设备场境进行Pixels 属性设置是没有用的。
注重: Pixels属性仅对位于当前Cliprect 数值内的像素有效。
方法
TCanvas::~TCanvas
删除一个TCanvas的实例。
__fastcall virtual ~ TCanvas(void);
在应用程序中,不要直接调用~TCanvas,而应调用delete。
~TCanvas首先释放为Font、Brush和Pen属性创建的TFont、TBrush和TPen对象。然后再释放TCanvas对象的内存。
TCanvas::Arc
沿由指定矩形确定的椭圆的边,可以在图片上画出一段孤线。
void __fastcall Arc{int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4};
使用Arc过程,用当前画笔画一个椭圆形曲线。弧线横跨以点(x1, y1)和点(x2, y2)为边界的椭圆边。根据椭圆形周长,按照逆时针方向,从起始点至结束点画出弧线。起始点为椭圆中心和点(x3, y3)确定的直线与椭圆的交点。结束点为椭圆中心和点(x4, y4)确定的直线与椭圆的交点。注重:在Windows95中,x1+x2的和,以及y1+y2的和,不能超出32768。而且,x1+x2+y1+y2的和也不能超出32768。在Windows NT中,使用Windows API调用SetrcDirection方法,画弧线的方向可以改变为顺时针方向。
TCanvas::BrushCopy
复制位图的一部分到位于画布上的矩形中,并且用画布刷子的颜色替代图像的颜色。
void__fastcall BrushCopy(const Windows::TRect & Dest, TBitmap * Bitmap, const Windows::TRect & Source, Tcolor color);
使用BrushCopy可以获得诸如使复制图片部分透明这样的非凡效果。BrushCopy过程具有向后兼容性能。使用TImageList方法可以替代BrushCopy过程。为了使运用BrushCopy过程复制出来的图片具有部分透明效果,应当指定画布表面的颜色(如clBackground)作为Brush属性的Color参数,然后调用BrushCopy过程。
TCanvas::Chord
画一个由一条直线和一个椭圆相交,所构成的闭合图形。
void__fastcall Chord (int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4);
使用Chord可以创建一个由弧形及链接弧形两个端点的直线所构成 的图形。弦是椭圆以点(x1,y1)和点(x2,y2)为边界的一部分。椭圆被点(x3,y3)和点(x4,y4)之间的一条直线分割成两部分。
弦的边从点(x3,y3)开始,按逆时针方向沿椭圆运行到点(x4,y4),最后一直回到点(x3,y3).假如点(x3,y3)和点(x4,y4),不在椭圆表面上,相应的弦的拐点,取在椭圆边上截断直线最接近的点。使用Pen属性数值可以画出弦的轮廓,使用Brush属性数值可以对图形进行填充。在Windows95中,x1+x2的和,以及y1+y2的和,不能超出32 768。而且,x1+x2+y1+y2的和也不能超出32 768。在Windows NT中,使用Windows API调用SetArcDirection方法,画弦的方向可以改变为顺时针方向。
TCanvas::CopyRect
将另一个画布上图形的一部分复制到这个画布上。
void__fastcall CopyRect (const Windows::TRect& Dest, TCanvas* Canvas, const Windows::TRect & Source);
使用CopyRect过程,可以将另一个画布上图形的一部分,转移到TCanvas对象的图片上。Dest参数,指定了将要复制的源图形存放在画布上的矩形区域。Canvas参数指定与源图像相关的画布。Source参数指定将要复制的源画布部分的矩形区域。源画布部分,通过使用CopyMode方法的指定模式来进行复制。
TCanvas::Draw
在给出的坐标(X,Y)位置处,Draw在画布上输出由Graphic参数指定的图像。
void __fastcall Draw(int X, int Y, TGraphic* Graphic);
调用Draw可以在画布上画出一个图像。Draw调用图形的Draw方法。图片输出到一个图形大小确定、左上角位于点(X,Y)处的矩形区域。
图像可以是点位图、图标或者图元文件。假如图像是一个Bitmap对象,点位图通过使用CopyMode方法的数值输出。
TCanvas::DrawFocusRect
画一个矩形框,通常用于表示矩形内的控件对象具有输入焦点。
void __fastcall DrawFocusRect( const Windows::TRect &Rect ) ;
当控件获得或失去输入焦点时,调用DrawFocusRect可以画出控件图片的边框。因为DrawFocusRect使用XOR功能,因此,当第二次调用drawFocusRect时,相同的矩形框将从屏幕上消失。
使用DrawFocusRect 画了出的矩形框,为能进行滚动。为了滚动由DrawFocusRect 画出的包含矩形框的区域,首先调用DrawFocusRect ,从屏幕上移去矩形框,滚动该区域,然后再调用drawFocusRect , 在新位置上画出矩形框。
TCamvas::Ellipse
在画布上的矩形范围内画椭圆。
void __fastcall Ellipse (int X1,int Y1,int X2,int Y2 );
调用Ellipse过程,可以在画布画圆或者椭圆。矩形范围的左上点位于像素坐标(x1,y1).矩形范围的右下点位于像素坐标 (x2,y2).。假如矩形窗体有所有点构成一个正方形,则将画出圆形。使用Pen属性的数值,可以画出椭圆轮廓;作用Brush属性的数值,可以对椭圆进行填充。
注重: 在Windows95中,x1 + x2 的和,以及 y1 +y2 的和,不能超出32768。而且,x1 +x2 +y1 +y2的和也不能超出32768。
TCanvas::fillRect
使用当前刷子填充画布上指定的矩形。
void__fastcall Rloodfill (int X, int Y ,TColor Color,TFillStyle FillStylr ) ;
使用Brush属性的数值,调用FloodFill 过程对可以一个非矩形区域进行填充,被填充区域的边界,从点(x,y,) 开始向外扩充,直到碰到Color参数指定的颜色边界为止。
FillStyle参数,确定了边界颜色变化类型,用下表进行表示。
数值 说明
fsSurface 填充所有由Color参数指定的颜色区域。当碰到另一种颜色时停止
fsBorder 填充所有由非Color参数指定的颜色区域。当碰到Color 参数指定的颜色边界时停止
当使用FillStyle参数为fsSurface的FloodFill过程时,使用Pixels属性可以获得位于点( x ,y )处的颜色的确切数值,类似地,当使用FillStyle参数为faBorder的FloodFill过程时,假如直到边界上的点,则使用Pixels属性可以获得边界颜色的确切数值。
TCanvas::FrameRect
使用画布的Brush属性,画出一个矩形的边框。
void__fastcall framsRect ( const Windows ::TRect &Rect ) ;
使用FrameRect可以画出一个像素宽的矩形区域有边界。FrameRect过程对矩形内部不用Brush属性进行填充。
通常,使用Polygon方法画一条边线,而不使用Pen方法 。
TCanvas ::LineTo
在画布上画开条从当前画笔位置到指定点(x,y)的直线,并且将画笔位置设置为点(x,y)。
void __fastcall LineTo (int X ,int Y);
使用LineTo可以画一条从当前画笔位置到指定点(x,y)的直线,但不包括点 (x,y)。 LineTo 将画笔位置设置为点(x,y)。
TCanvas::Lock
可以使其他线条不在画布上画出。
void __ fastcall Lock(void );
在需要画多条线条的应用程序中,调用Lock过程可以使其他线条不在画布上画出。除非调用了UnLock方法,否则Lock过程可以使应用程序中的所有其他线条不会画出,嵌套调用Lock, 使LockCount属性增加,以致使画布上进行作图,除非最后一个锁定被释放。
由于Lock可以使所有其他线条不会画出,因此Lock对执行情况具有负影响,除非存在其他线条可能妨碍再画布上进行作图,则不要调用Lock 。
TCanvas::MoveTo
使用当前作图位置移到点(x,y).
void __ fastrall MoveTo ( int X , int Y ) ;
在调用LineTo之前,使用MoveTo可以对画笔位置数值进行设定。调用MoveTo的作用与设定画笔位置属性的作用相同。
TCamvas::Pie
用来在画布上画一个扇形椭圆的一部分,扇形的边界为点(x1,y1)和点(x2,y2)确定的矩形的椭圆。
void__fastcall Pie (int X1,int Y1,int X2,int Y2,int X3,int Y3,int X4,int Y4 );
使用Pie 可以画一个扇形。扇形的边界为点(x1,y1)和点(x2,y2)确定的矩形的椭圆。画出的椭圆部分由椭圆中心向外辐射的经过点(x3,y3)和点(x4,Y4)的两条直线所确定。
使用Pen属性的数值,可以画出扇形轮廓;使用Brush 属性的数值,可以对扇形进行填充。
注重:在windows95中,x1+x2 的和,以及y1+y2的和,不能超出32 768 。而且,x1+x2+y1+y2的和也不能超过32768。
TCanvas::PolyBezier
画一簇Bezier曲线。
void __fastcall PolyBezier (const tagPOINT* Points,const int Points_Size );
PolyBezier用于根据 Points参数指定的控制点画三次Bezier曲线。其中第一条曲线经过第一、第四点。2、3点为控制点。按顺序,每条曲线需至少四个点;上一曲线的终点为下一曲线的开始点,紧接着的两个点为控制点,第四点为终点。画线时使用当前的笔。
可以使用Sice函数把点数组传给PolyBezierTo方法。例如,把100 个点的前10个点画成一条Bezier曲线,使用方法如下:
Canvas::PolyBezier(Slice(PointArray,10));
TPanvas::PolyBezierTo
画一簇Bezier曲线并更新PenPos的值。
void__fastcall PolyBezierPo(const tagPOINT* Points ,const inty Points_Size );
PolyBezierTo 用于根据 Points 参数指定的控制点画三次 Bezier 曲线 。其中第一条曲线经过第一、第四点,2、3点为控制点。按顺序,每条曲线需至少四个点;上一曲线的终点为下一曲线的开始点,紧接着的两个点为控制点,第四点为终点。画线时使用当前的笔并把 PenPos 更新为最后一个点的值。
可以使用Slice函数把点数组传给PokybezierTo方法。例如,把100个点的数组的前10个画成一条Brzier曲线,使用方法如下:
Canvas::PolyBezierTo(Slice(PointArray,10));
TCanvas::Polygon
在画布上画出链接所有点的一系列直线,并且画出一条从最后一点到起始点的直线以闭合图形。
void __fastcall Polygon( const tagPOINT* Plints const int Points_Size ) ;
使用Polygon, 通过画笔可以在画布上画出一个闭合的多边形。画出完整图形之后,Polygon 还用Brush属性的数值自动填充图形。当需要画一个多边形而又不需要填充时,可以调用Polyline方法,只需要结尾处第二次指定起始点即可。
使用Slice函数,可以将点数组的一部分传递给Polygon 方法。例如 ,以100个点的数组中的开始 10 个点画出一个多边形,可以像以下方法使用Slice函数:
Canvas::Polygon::(Slice(PointAeeay,10)。
TCanvas ::Polyline
以当前画笔在画布上画出一系列链接点数组中的每一个点的直线。
void __fastcall Polyline(const tagPOINT* Points.const int Points_Size ) ;
使用 Pilyline 可以在画布上链接一系列的点。假如仅有两个点,Polyline仅画出一条直线。调用MoveTo 功能,将画笔位置移到第一个点,然后用后面所有的点重复调用 LineTo,可以在画布上画出与调用 Pokyline 一样的图形。然而,与 LineToi不同的是,Polyine过程不能改变画笔位置数值。
使用Slice函数,可以将点数组的一部分传递给Polyline方法。例如,为了链接100个点数组中的开始10个点,可按以下方法使用Slice函数:
Canvas::Polyine::(Slice(PointArray,10).
TCanvas::Rectangle
可以在画布上画出一个矩形,矩形的左上角为点(x1, y1) ,右下角为点(x2, y2)。
void__fastcall Rectangle(int X1, int Y1, int X2, int Y2, );
调用Rectangle过程,使用画笔画出一个矩形,并且用刷子进行填充。如要填充一个矩形区域而又不需用当前画笔画出边线时,应使用FillRect方法。假如需要没有填充的矩形区域轮廓,应使用FrameRect方法或者Polygon方法。假如需要画出一个圆角的矩形,应使用RoundRect方法。
TCanvas::Refresh
从设备场境里删除Pen、Brush以及Font。
void__fastcall Refresh (void);
调用Refresh可以使画布使用的HDC回到缺省状态。Refresh不会改变Pen属性、Brush属性以及Font属性的数值。调用Refresh后,假如HDC是被作图方法使用的话,那么任何作图方法的调用,将需要为HDC重新选择Brush、Font或者Pen。
TCanvas::RoundRect
可以在画布上画出一个圆角的矩形。
void__fastcall RoundRect (int X1, int Y1, int X2, int Y2, int X3, int Y3);
调用RoundRect可以使用画笔画出一个圆角的矩形,并且用刷子进行填充。矩形的边由点(x1, y1)、点(x2,y1)、点(x2,y2)和点(x1,y2)确定。矩形的角被修剪以形成圆的外观。画一个椭圆,使用Ellipse方法。画一个真正的矩形,使用Rectangle方法。
TCanvas::StretchDraw
在由Rect参数指定的矩形区域内,画出由Graphic参数指定的图像。
void __fastcall StretchDraw (const Windows::TRect& Rect, TGraphic* Graphic);
调用StretchDraw在画布上画出一个图像,以便使图像与指定的矩形区域相适应。StretchDraw过程调用图像的Draw方法。图像决定了如何使图像与矩形区域相适应。这可能包括放大或者缩小比例。为了使图像能够按其原先尺寸画出,应使用Draw方法。 图像可以是点位图、图标或者位图文件。假如图像是TBitmap对象,点位图使用CopyMode属性的数值画出。
TCanvas::TCanvas
创建一个TCanvas对象的实例。
__fastcall TCanvas(void);
不要直接调用TCanvas构造函数,用new来实例化一个TCanvas对象。 TCanvas为TCanvas的实例分配内存,并且为Font、Brush和Pen属性创建TFont、TBrush和TPen对象。TCanvas还将CopyMode方法初始化为cmSrcCopy。
TCanvas::TextExtent
返回以当前字体表示的字符串的像素宽度和像素高度。
tagSIZE __fastcall TextExtent(const System::AnsiString Text) ;
使用TextExtent 可以确定字符串在图片上占用的空间。在图片上的诸如线条、框架以及文本的附加线等单元被放在适当的位置,以容纳文本大小。仅检查文本高度,调用 TextHeight 方法。仅检查文本的宽度,调用TextWidth方法。
TCanvas::TextHeight
返回以当前字体表示的字符串的像素高度。
int __fastcall TextHeight(const system::AnsiString Text );
使用TextHeight可以确定字符串在图片上占用的高度。在图片上的诸如线条、框架以及文本的附加线等单元被放在适当的位置,以容纳文本的高度。TextHeight 函数返回与TextExtent(Text )::cy 相同的数值。
TCanvas::TextOut
在画布上从点(x,y)处开始输出一个字符串,同时将画笔位置修改为字符串的结束位置。
void __fastcsll TextOut( int X, int Y, const System::AnsiString text ) ;
使用TextOut 可以向画布上输出一个字符串。按字体的当前数值输出字符串。使用 TextExtent 能够确定出文本在图片上的占用空间。为了输出仅与剪切矩形区域相适应的文本,应使用权TextRect 方法 。
TCanvas::TextRect
在一个剪切矩形区域内输出一个字符串。
void __fastcall TextRect(const Windows::TEect& Rect,int X,int Y,const System::AnsiString Text);
使用TextRect可以在一个限制的矩形区域内输出一个字符串。字符串落在由Rect 参数指定的矩形区域外的任何部分将被剪切且不显示。文本的左上角位于点(X,Y) 。
TCanvas::TextWidth
返回以当前字体表示的字符串的像素宽度。
int __fastcall TextWidth(const system::AnsiString Text);
使用TExtWidth 可以确定字符串在图片上占用的长度。TextWidth 函数表明给出的字符串是否与可用空间相适应。在图片上的诸如线条、框架以及文本有附加线等单元被放在适当的位置,以容纳文本的宽度,Textwidth返回与TextExtent(Text)::cx相同的数值。
TCanvas::TryLock(void);
除非调用了 UnLock 方法,否则调用 TryLock 可以避免其他线条在画布表面上输出。调用Lock方法需要配套使用,每调用一次 Lock 方法必须一后面调用 UnLock 方法相匹配。假如画布没有锁定,那么对TryLock函数的调用仅需与调用一次UnLock方法相匹配。假如画布是开启的,调用TryLock函数将锁守画布,将LockCount 属性值设为1、返回True 值。假如画布被锁定,调用TryLock 函数不产生任何变化,返回False值。
在试图改变画布之前,调用 TryLock 函数可能妨碍由 Lock 和 UnLock 平共处成对调用方法保护的其他代码的执行。
TCancas::__fastcall Unlock(void);
使 LockCount 属性值减少,并且答应其他线条输出直至LockCount属性值为0。
void __fastcall UnLock(void) ;
在以调用 Lock 方法开始的临界区的结尾处调用 UnLock 过程。每一个对 Lock方法的调用,必须与调用 UnLock 方法相匹配。
TCanvas::OnChange
当画布上的图像刚发生变化时,OnChange事件发生。
__property Classes::TNotifyEvent OnChange = {read =FOnChange, write = FOnChange };
每当画布上的图像发生变化时,写OnChange事件处理程序以执行特定的行为。应用程序调用TCanvas对象的一个作图方法时,引起下列变化:
·产生一个OnChanging事件。
·调用TCanvas方法,使图像发生变化。
·产生一个OnChange事件。
OnChange事件是在图像产生变化时产生,而不是画布属性产生变化时产生。应用程序中对Font属性Brush属性和Pen属性的变化,可以通过设定OnChange事件处理程序以产生相应的TFont对象、TBrush 对象和TPen对象。然而,TCanvas对象为这些对象设定了其自身的OnChange事件处理程序。在指定这些对象的OnChange事件处理程序之前,首先读出现在的事件处理程序。使用读出的数值。从新事件处理程序调用TCanvas对象的事件处理程序。
TCanvas ::OnChanging
当画布上的图像刚要发生变化时,OnChanging事件发生。
__propenty CIasses::TNotifyEvent OnChanging = {read =FOnChanging, write = RonXhanging};
在画布上的图像发生变化之前,写OnChanging事件处理程序以执行特定的行为。当应用程序调用TCanvas对象的一个作图方法时,引起下列变化:
·一个OnChanging事件发生。
·调用TCanvas方法,使图像发生变化。
·一个OnChange事件发生。
赞助商链接