GDI+ —— Tcanvas 类属性及方法.......

delphi 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的作用与设定画笔位置属性的作用相同。

上一篇:看看baidu是如何AJAX跨域的[转]


下一篇:Android开发技巧——自定义控件之使用style