TCanvas為作圖對(duì)象提供一個(gè)抽象的畫(huà)布。
類關(guān)系 TObject->TPersistent
對(duì)那些作圖對(duì)象,可使用TCanvas對(duì)象作為畫(huà)布。標(biāo)準(zhǔn)的window控件,例如編輯控件和列表框控件,當(dāng)它們被Windows畫(huà)出來(lái)時(shí),并不需要一塊畫(huà)布。在創(chuàng)建一幅圖像時(shí),TCanvas對(duì)象提供有用的屬性、方法和事件,主要通過(guò)以下方法:
指定需要使用的刷子、畫(huà)筆和字體類型。
對(duì)各類形狀和線條進(jìn)行作圖和填充。
輸入文體。
對(duì)圖像進(jìn)行著色。
對(duì)當(dāng)前圖像的變化能作出反應(yīng)。
TCanvas有兩個(gè)子類,即TControlCanvas和TMetafileCanvas,它們對(duì)控件圖像的作圖和創(chuàng)建對(duì)象的圖元文件圖像有所幫助。
屬性列表
Brush 決定畫(huà)布填充圖形的背景顏色和填充圖案的模式
ClipRect 指定剪貼矩形的邊界
CopyMode 確定如何將復(fù)制的圖像放到畫(huà)布上面
Font 指定使用文體的字體
Handle 是針對(duì)畫(huà)布的Windows GDI句柄
LockCount 表示畫(huà)布被鎖定的次數(shù)
Pen 指定使用的畫(huà)筆種類
PenPos 指定畫(huà)筆當(dāng)前的作圖位置
Pixels 指定當(dāng)前ClipRect中點(diǎn)的顏色
方法列表
~TCanvas 釋放TCanvas占用的內(nèi)存
Arc 在圖片上畫(huà)出一段弧線
BrushCopy 制位圖的一部分到位于畫(huà)布上的矩形中
Chord 畫(huà)一個(gè)由一條直線和一個(gè)橢圓相交所的的閉合圖形
CopyRect 將另一畫(huà)布上圖形的一部分復(fù)制到這個(gè)畫(huà)布上
Draw 在畫(huà)布上輸出由Graphic參數(shù)指定的圖像
DrawFocusRect 畫(huà)一個(gè)矩形框表示矩形內(nèi)的控件對(duì)象具有輸入焦點(diǎn)
Ellipse 在畫(huà)布上畫(huà)橢圓
FillRect 使用當(dāng)前刷子填充畫(huà)布上指定的矩形
FloodFill 使用當(dāng)前刷子填充畫(huà)布上的一塊區(qū)域
FraneRect 畫(huà)出一個(gè)矩形的邊框
LineTo 在畫(huà)布上畫(huà)一條從當(dāng)前畫(huà)筆位置到指定點(diǎn)(x, y)的直線
Lock 使其他線條不在畫(huà)布上畫(huà)出
MoveTo 使當(dāng)前作圖位置移到點(diǎn)(x, y)
Pie 在畫(huà)布上畫(huà)一個(gè)扇形
PolyBezier 畫(huà)一簇Bezier曲線
PolyBezierTo 畫(huà)一簇Bezier曲線并更新PenPos的值
Polygon 在畫(huà)布上畫(huà)出閉合圖形
Polyine 在畫(huà)布上畫(huà)出一系列鏈接點(diǎn)數(shù)組中的每一個(gè)點(diǎn)的直線
Rectangle 在畫(huà)布上畫(huà)出一個(gè)矩形
Refresh 從設(shè)備場(chǎng)境里刪除 Pen、Brush 以及 Font
RoundRect 在畫(huà)布上畫(huà)出一園角的矩形
StretchDraw 畫(huà)出由 raphic 參數(shù)指定的圖像
TCanvas 創(chuàng)建一介 TCanvas 對(duì)象的實(shí)例
TextExtent 返回字符串的像素寬度和高度
TextHeight 返回字符串的像素高度
TextOut 在畫(huà)布上從點(diǎn)(x,y)處開(kāi)始輸出一字符串
TextRect 在剪切矩形區(qū)內(nèi)輸出字符串
TextWidth 返回字符串的像素寬度
TryLock 調(diào)用TryLock 將鎖定畫(huà)布
Unlock 使LockCount 屬性值減少
事件列表
OnChange 當(dāng)畫(huà)布上的圖像剛發(fā)生變化時(shí)OnChange事件發(fā)生
OnChanging 當(dāng)畫(huà)布上的圖像剛發(fā)生變化時(shí)OnChanging事件發(fā)生
屬性
TCanvas::Brush
決定畫(huà)布填充圖形的背景顏色和填充圖案模式。
__property TBrush* Brush = { read =FBrush, write =SetBrush };
通過(guò)設(shè)置 Brush屬性的屬性,指定作圖背景顏色和填充圖案的模式。Brush 屬性值為T(mén)Brush 對(duì)象。當(dāng)在畫(huà)布上填充一個(gè)空間時(shí),通過(guò)設(shè)置TBrush 對(duì)象的屬性,可以指定可以使用的顏色、模式或者位圖。
注意:設(shè)置Brush 屬性是為分配指定的TBrush 對(duì)象,而不是替代當(dāng)前的 TBrush 對(duì)象。
TCanvas:::ClipRect
指定剪貼矩形的邊界。
__property Windows:::TRect ClipRect = {read =GetClipRect };
使用ClipRect權(quán)屬性用來(lái)限定畫(huà)布的作圖區(qū)域。任何坐標(biāo)在ClipRect 屬性以外的作圖將被剪切掉并且不會(huì)出現(xiàn)在圖像中,例如,在一個(gè)較小的框中畫(huà)一個(gè)大圓的一部分,首先畫(huà)框,然后對(duì)由框的內(nèi)邊界限定的矩形進(jìn)行ClipRect屬性設(shè)置 。此時(shí),畫(huà)整個(gè)圓將顯示在框內(nèi)部分。
當(dāng)處理窗體的OnPaint 事件時(shí),畫(huà)布的ClipRect 屬性被設(shè)置成所需著色的矩形。不與ClipRect 重疊的圖像部分,不必畫(huà)出。因此,OnPaint 例程能夠使用 ClipRect 屬性的數(shù)值,對(duì)著色進(jìn)行優(yōu)化,并加速應(yīng)用軟件的全面運(yùn)行。
TCanvas::CopyMode
確定如何將復(fù)制的圖像放到畫(huà)布上面。
__property int Copy Mide = {read = FCopyMode, write = FCopyMode, default = 13369376 };
設(shè)置copyMode屬性,可以改變畫(huà)出的圖像到畫(huà)布上面的路徑。當(dāng)使用CpyReet 方法從另外的畫(huà)布上復(fù)制圖像時(shí),使用CopyMode屬性。當(dāng)TBitmap 對(duì)象畫(huà)它們自身到一個(gè)畫(huà)布上時(shí),CopyNode屬性還被TBitmap對(duì)象使用。
下表給出了CopyMode屬性可能的取值,并對(duì)每一取值進(jìn)行了描述。
取值 說(shuō) 明
cmBlackness 用黑色填充畫(huà)布的矩形目標(biāo)
cmDstInvert 忽略源圖,將畫(huà)布上的圖像反轉(zhuǎn)
cmMergeCopy 將畫(huà)布上的圖像與源位圖進(jìn)行AND操作
cmMergePaint 將畫(huà)布上的圖像與反轉(zhuǎn)的源位圖進(jìn)行OR操作
cmNotSrcCopy 復(fù)制反轉(zhuǎn)的源位圖與畫(huà)布
cmNotSrcErsae 將畫(huà)布上的圖像與源位圖進(jìn)行OR操作,然后再反轉(zhuǎn)
cmPatCopy 復(fù)制源式樣至畫(huà)布
cmPatInvert 將畫(huà)布上的圖像與源式樣進(jìn)行XOR操作
cmPatPaint 使用OR操作使反轉(zhuǎn)的源位圖與源式樣結(jié)合,并將操作結(jié)果與畫(huà)布上的圖像進(jìn)行OR操作
cmSsrcAnd 將畫(huà)布上的圖像與源位圖進(jìn)行AND操作
cmSrcCopy 復(fù)制源位圖至畫(huà)布
cmSrcErase 將畫(huà)布上的圖像進(jìn)行反轉(zhuǎn),然后將其與源位圖進(jìn)行XOR操作
cmSrcInvert 將畫(huà)布上的圖像與源位圖進(jìn)行OR操作
cmWhiteness 用白色填充畫(huà)布上的矩形目標(biāo)
TCanvas::Font
當(dāng)在圖像上寫(xiě)的文本時(shí),使用Font屬性指定使用文本的字體
__property TFont* Font = { read = FFont, write = SetFont } ;
對(duì)圖像上的文本,使用Font屬性可以指定使用文本的字體。Font 屬性的數(shù)值是TRont 對(duì)象。設(shè)置TFont對(duì)象的屬性,可以指定使用字體的外觀、顏色、大小以及風(fēng)格等。
注意:僅對(duì)指定TFont對(duì)象的 Font 屬性進(jìn)行指定,而不是替代當(dāng)前的TFont對(duì)象。
TCanvas::HandIe
是針對(duì)畫(huà)布的Windows GDI句柄。
__property HDC HandIe = { read = GetHandIe write = SetHandIe ,nodefauIt } ;
對(duì)于卷入畫(huà)布的設(shè)備場(chǎng)境,必須設(shè)置HDC 的Handle 屬性。當(dāng)窗口控件對(duì)Windows 著色信息進(jìn)行響應(yīng)時(shí),繪圖所需的HDC 即轉(zhuǎn)化為PrtDeviceContext 方法 。在其他情況下,通過(guò)調(diào)用控件的GetDeviceContext方法,也能獲得HDC。此外,對(duì)打印機(jī)或者存儲(chǔ)器,Windows 還提供了能夠獲得HDC的API調(diào)用方法。
讀Handle 屬性可以對(duì)由使用需要設(shè)備場(chǎng)境句柄的進(jìn)行API調(diào)用的TCanvas 對(duì)象提供繪圖設(shè)備進(jìn)行補(bǔ)充。絕大多數(shù)的Windows GDI調(diào)用,需要HDC。
TCancas對(duì)象沒(méi)有自己的HDC。應(yīng)用軟件必須建立一個(gè)HDC,并對(duì)Handle 屬性進(jìn)行設(shè)置。當(dāng)畫(huà)布不再需要時(shí),應(yīng)用軟件應(yīng)釋放HDC。對(duì)已有效一個(gè)有HDC畫(huà)布,進(jìn)行Handle屬性進(jìn)行設(shè)置時(shí),將不能自動(dòng)釋放初始的HDC。
注意:TCanvas 對(duì)象的一些字體,如TControlCanvas , 有其自己的HDC。不要為這些對(duì)象設(shè)置Handle屬性。它們使用并釋放自己的Handle屬性。
TCanvas::LocKcount
表示畫(huà)布被鎖定的次數(shù),以避免與其他線條相沖突。
__properrty int LockCount = {read = FLockCount,nodefault }:
讀LockCount屬性可以查明畫(huà)布是否被鎖定。每當(dāng)調(diào)用Lock方法防止畫(huà)布與其他線條相沖突時(shí),LockCount屬性增加。調(diào)用Unlock方法時(shí),LockCount 屬性減少。當(dāng)LockCount屬性為0時(shí),其他線條可以在畫(huà)布上畫(huà)出。
TCanvas::Pen
指定畫(huà)布為畫(huà)線和畫(huà)圖形輪廓而使用的畫(huà)筆種類。
__property TPen * Pen + {read = FPen, write =SetPen };
在一幅圖像中,設(shè)置Pen 屬性可指定畫(huà)線和畫(huà)圖形輪廓而使用的畫(huà)筆種類。Pen屬性的數(shù)值是TPen對(duì)象。設(shè)置TPeb對(duì)象的屬性,可以指定畫(huà)筆的顏色、風(fēng)格、寬度以及樣式等。
注意:僅對(duì)指定TPen 對(duì)象的Pen屬性進(jìn)行設(shè)置,而不是替代當(dāng)前的TPen對(duì)象。
TCanvas::PenPos
用來(lái)指定畫(huà)筆當(dāng)前的作圖位置。
__property tag POINT penPos = {read = GetPenPos , write = SetPos },
讀 PernPos 可以知道畫(huà)筆當(dāng)前的傻圖位置。它是用 LineTo 方法作圖的起始點(diǎn)位置。設(shè)置 PenPos 屬性相當(dāng)于調(diào)用 MoveTo 方法 。
TCanvas::Pixels
指定當(dāng)前 ClipRect是中點(diǎn)顏色。
__property TColor Tixels [ int Y ] = { read = Get Pixel , write = SetPixe } ';
讀取Tixels 讀屬性可以知道位于具體像素位置的畫(huà)面顏色。寫(xiě)Pixels屬性可以改變畫(huà)面上某個(gè)特定像素的顏色。使用Pixels 屬性可以細(xì)化圖像效果。Pixels 屬性還可以用于確定被FillRect方法使用的顏色。
不是每一個(gè)設(shè)備場(chǎng)境都支持Pixels屬性。這樣的設(shè)備場(chǎng)境,讀出的Pixels屬性返回值為--- 1。則對(duì)這樣的設(shè)備場(chǎng)境進(jìn)行Pixels 屬性設(shè)置是沒(méi)有用的。
注意: Pixels屬性僅對(duì)位于當(dāng)前Cliprect 數(shù)值內(nèi)的像素有效。
方法
TCanvas::~TCanvas
刪除一個(gè)TCanvas的實(shí)例。
__fastcall virtual ~ TCanvas(void);
在應(yīng)用程序中,不要直接調(diào)用~TCanvas,而應(yīng)調(diào)用delete。
~TCanvas首先釋放為Font、Brush和Pen屬性創(chuàng)建的TFont、TBrush和TPen對(duì)象。然后再釋放TCanvas對(duì)象的內(nèi)存。
TCanvas::Arc
沿由指定矩形確定的橢圓的邊,可以在圖片上畫(huà)出一段孤線。
void __fastcall Arc{int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4};
使用Arc過(guò)程,用當(dāng)前畫(huà)筆畫(huà)一個(gè)橢圓形曲線。弧線橫跨以點(diǎn)(x1, y1)和點(diǎn)(x2, y2)為邊界的橢圓邊。根據(jù)橢圓形周長(zhǎng),按照逆時(shí)針?lè)较颍瑥钠鹗键c(diǎn)至結(jié)束點(diǎn)畫(huà)出弧線。起始點(diǎn)為橢圓中心和點(diǎn)(x3, y3)確定的直線與橢圓的交點(diǎn)。結(jié)束點(diǎn)為橢圓中心和點(diǎn)(x4, y4)確定的直線與橢圓的交點(diǎn)。注意:在Windows95中,x1+x2的和,以及y1+y2的和,不能超出32768。而且,x1+x2+y1+y2的和也不能超出32768。在Windows NT中,使用Windows API調(diào)用SetrcDirection方法,畫(huà)弧線的方向可以改變?yōu)轫槙r(shí)針?lè)较颉?br/>
TCanvas::BrushCopy
復(fù)制位圖的一部分到位于畫(huà)布上的矩形中,并且用畫(huà)布刷子的顏色替代圖像的顏色。
void__fastcall BrushCopy(const Windows::TRect & Dest, TBitmap * Bitmap, const Windows::TRect & Source, Tcolor color);
使用BrushCopy可以獲得諸如使復(fù)制圖片部分透明這樣的特殊效果。BrushCopy過(guò)程具有向后兼容性能。使用TImageList方法可以替代BrushCopy過(guò)程。為了使運(yùn)用BrushCopy過(guò)程復(fù)制出來(lái)的圖片具有部分透明效果,應(yīng)當(dāng)指定畫(huà)布表面的顏色(如clBackground)作為Brush屬性的Color參數(shù),然后調(diào)用BrushCopy過(guò)程。
TCanvas::Chord
畫(huà)一個(gè)由一條直線和一個(gè)橢圓相交,所構(gòu)成的閉合圖形。
void__fastcall Chord (int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4);
使用Chord可以創(chuàng)建一個(gè)由弧形及鏈接弧形兩個(gè)端點(diǎn)的直線所構(gòu)成 的圖形。弦是橢圓以點(diǎn)(x1,y1)和點(diǎn)(x2,y2)為邊界的一部分。橢圓被點(diǎn)(x3,y3)和點(diǎn)(x4,y4)之間的一條直線分割成兩部分。
弦的邊從點(diǎn)(x3,y3)開(kāi)始,按逆時(shí)針?lè)较蜓貦E圓運(yùn)行到點(diǎn)(x4,y4),最后一直回到點(diǎn)(x3,y3).如果點(diǎn)(x3,y3)和點(diǎn)(x4,y4),不在橢圓表面上,相應(yīng)的弦的拐點(diǎn),取在橢圓邊上截?cái)嘀本€最接近的點(diǎn)。使用Pen屬性數(shù)值可以畫(huà)出弦的輪廓,使用Brush屬性數(shù)值可以對(duì)圖形進(jìn)行填充。在Windows95中,x1+x2的和,以及y1+y2的和,不能超出32 768。而且,x1+x2+y1+y2的和也不能超出32 768。在Windows NT中,使用Windows API調(diào)用SetArcDirection方法,畫(huà)弦的方向可以改變?yōu)轫槙r(shí)針?lè)较颉?br/>
TCanvas::CopyRect
將另一個(gè)畫(huà)布上圖形的一部分復(fù)制到這個(gè)畫(huà)布上。
void__fastcall CopyRect (const Windows::TRect& Dest, TCanvas* Canvas, const Windows::TRect & Source);
使用CopyRect過(guò)程,可以將另一個(gè)畫(huà)布上圖形的一部分,轉(zhuǎn)移到TCanvas對(duì)象的圖片上。Dest參數(shù),指定了將要復(fù)制的源圖形存放在畫(huà)布上的矩形區(qū)域。Canvas參數(shù)指定與源圖像相關(guān)的畫(huà)布。Source參數(shù)指定將要復(fù)制的源畫(huà)布部分的矩形區(qū)域。源畫(huà)布部分,通過(guò)使用CopyMode方法的指定模式來(lái)進(jìn)行復(fù)制。
TCanvas::Draw
在給出的坐標(biāo)(X,Y)位置處,Draw在畫(huà)布上輸出由Graphic參數(shù)指定的圖像。
void __fastcall Draw(int X, int Y, TGraphic* Graphic);
調(diào)用Draw可以在畫(huà)布上畫(huà)出一個(gè)圖像。Draw調(diào)用圖形的Draw方法。圖片輸出到一個(gè)圖形大小確定、左上角位于點(diǎn)(X,Y)處的矩形區(qū)域。
圖像可以是點(diǎn)位圖、圖標(biāo)或者圖元文件。如果圖像是一個(gè)Bitmap對(duì)象,點(diǎn)位圖通過(guò)使用CopyMode方法的數(shù)值輸出。
TCanvas::DrawFocusRect
畫(huà)一個(gè)矩形框,通常用于表示矩形內(nèi)的控件對(duì)象具有輸入焦點(diǎn)。
void __fastcall DrawFocusRect( const Windows::TRect &Rect ) ;
當(dāng)控件獲得或失去輸入焦點(diǎn)時(shí),調(diào)用DrawFocusRect可以畫(huà)出控件圖片的邊框。因?yàn)镈rawFocusRect使用XOR功能,因此,當(dāng)?shù)诙握{(diào)用drawFocusRect時(shí),相同的矩形框?qū)钠聊簧舷А?br/> 使用DrawFocusRect 畫(huà)了出的矩形框,為能進(jìn)行滾動(dòng)。為了滾動(dòng)由DrawFocusRect 畫(huà)出的包含矩形框的區(qū)域,首先調(diào)用DrawFocusRect ,從屏幕上移去矩形框,滾動(dòng)該區(qū)域,然后再調(diào)用drawFocusRect , 在新位置上畫(huà)出矩形框。
TCamvas::Ellipse
在畫(huà)布上的矩形范圍內(nèi)畫(huà)橢圓。
void __fastcall Ellipse (int X1,int Y1,int X2,int Y2 );
調(diào)用Ellipse過(guò)程,可以在畫(huà)布畫(huà)圓或者橢圓。矩形范圍的左上點(diǎn)位于像素坐標(biāo)(x1,y1).矩形范圍的右下點(diǎn)位于像素坐標(biāo) (x2,y2).。如果矩形窗體有所有點(diǎn)構(gòu)成一個(gè)正方形,則將畫(huà)出圓形。使用Pen屬性的數(shù)值,可以畫(huà)出橢圓輪廓;作用Brush屬性的數(shù)值,可以對(duì)橢圓進(jìn)行填充。
注意: 在Windows95中,x1 + x2 的和,以及 y1 +y2 的和,不能超出32768。而且,x1 +x2 +y1 +y2的和也不能超出32768。
TCanvas::fillRect
使用當(dāng)前刷子填充畫(huà)布上指定的矩形。
void__fastcall Rloodfill (int X, int Y ,TColor Color,TFillStyle FillStylr ) ;
使用Brush屬性的數(shù)值,調(diào)用FloodFill 過(guò)程對(duì)可以一個(gè)非矩形區(qū)域進(jìn)行填充,被填充區(qū)域的邊界,從點(diǎn)(x,y,) 開(kāi)始向外擴(kuò)充,直到遇到Color參數(shù)指定的顏色邊界為止。
FillStyle參數(shù),確定了邊界顏色變化類型,用下表進(jìn)行表示。
數(shù)值 說(shuō)明
fsSurface 填充所有由Color參數(shù)指定的顏色區(qū)域。當(dāng)遇到另一種顏色時(shí)停止
fsBorder 填充所有由非Color參數(shù)指定的顏色區(qū)域。當(dāng)遇到Color 參數(shù)指定的顏色邊界時(shí)停止
當(dāng)使用FillStyle參數(shù)為fsSurface的FloodFill過(guò)程時(shí),使用Pixels屬性可以獲得位于點(diǎn)( x ,y )處的顏色的確切數(shù)值,類似地,當(dāng)使用FillStyle參數(shù)為faBorder的FloodFill過(guò)程時(shí),如果直到邊界上的點(diǎn),則使用Pixels屬性可以獲得邊界顏色的確切數(shù)值。
TCanvas::FrameRect
使用畫(huà)布的Brush屬性,畫(huà)出一個(gè)矩形的邊框。
void__fastcall framsRect ( const Windows ::TRect &Rect ) ;
使用FrameRect可以畫(huà)出一個(gè)像素寬的矩形區(qū)域有邊界。FrameRect過(guò)程對(duì)矩形內(nèi)部不用Brush屬性進(jìn)行填充。
通常,使用Polygon方法畫(huà)一條邊線,而不使用Pen方法 。
TCanvas ::LineTo
在畫(huà)布上畫(huà)開(kāi)條從當(dāng)前畫(huà)筆位置到指定點(diǎn)(x,y)的直線,并且將畫(huà)筆位置設(shè)置為點(diǎn)(x,y)。
void __fastcall LineTo (int X ,int Y);
使用LineTo可以畫(huà)一條從當(dāng)前畫(huà)筆位置到指定點(diǎn)(x,y)的直線,但不包括點(diǎn) (x,y)。 LineTo 將畫(huà)筆位置設(shè)置為點(diǎn)(x,y)。
TCanvas::Lock
可以使其他線條不在畫(huà)布上畫(huà)出。
void __ fastcall Lock(void );
在需要畫(huà)多條線條的應(yīng)用程序中,調(diào)用Lock過(guò)程可以使其他線條不在畫(huà)布上畫(huà)出。除非調(diào)用了UnLock方法,否則Lock過(guò)程可以使應(yīng)用程序中的所有其他線條不會(huì)畫(huà)出,嵌套調(diào)用Lock, 使LockCount屬性增加,以致使畫(huà)布上進(jìn)行作圖,除非最后一個(gè)鎖定被釋放。
由于Lock可以使所有其他線條不會(huì)畫(huà)出,因此Lock對(duì)執(zhí)行情況具有負(fù)影響,除非存在其他線條可能妨礙再畫(huà)布上進(jìn)行作圖,則不要調(diào)用Lock 。
TCanvas::MoveTo
使用當(dāng)前作圖位置移到點(diǎn)(x,y).
void __ fastrall MoveTo ( int X , int Y ) ;
在調(diào)用LineTo之前,使用MoveTo可以對(duì)畫(huà)筆位置數(shù)值進(jìn)行設(shè)定。調(diào)用MoveTo的作用與設(shè)定畫(huà)筆位置屬性的作用相同。
TCamvas::Pie
用來(lái)在畫(huà)布上畫(huà)一個(gè)扇形橢圓的一部分,扇形的邊界為點(diǎn)(x1,y1)和點(diǎn)(x2,y2)確定的矩形的橢圓。
void__fastcall Pie (int X1,int Y1,int X2,int Y2,int X3,int Y3,int X4,int Y4 );
使用Pie 可以畫(huà)一個(gè)扇形。扇形的邊界為點(diǎn)(x1,y1)和點(diǎn)(x2,y2)確定的矩形的橢圓。畫(huà)出的橢圓部分由橢圓中心向外輻射的經(jīng)過(guò)點(diǎn)(x3,y3)和點(diǎn)(x4,Y4)的兩條直線所確定。
使用Pen屬性的數(shù)值,可以畫(huà)出扇形輪廓;使用Brush 屬性的數(shù)值,可以對(duì)扇形進(jìn)行填充。
注意:在windows95中,x1+x2 的和,以及y1+y2的和,不能超出32 768 。而且,x1+x2+y1+y2的和也不能超過(guò)32768。
TCanvas::PolyBezier
畫(huà)一簇Bezier曲線。
void __fastcall PolyBezier (const tagPOINT* Points,const int Points_Size );
PolyBezier用于根據(jù) Points參數(shù)指定的控制點(diǎn)畫(huà)三次Bezier曲線。其中第一條曲線經(jīng)過(guò)第一、第四點(diǎn)。2、3點(diǎn)為控制點(diǎn)。按順序,每條曲線需至少四個(gè)點(diǎn);上一曲線的終點(diǎn)為下一曲線的開(kāi)始點(diǎn),緊接著的兩個(gè)點(diǎn)為控制點(diǎn),第四點(diǎn)為終點(diǎn)。畫(huà)線時(shí)使用當(dāng)前的筆。
可以使用Sice函數(shù)把點(diǎn)數(shù)組傳給PolyBezierTo方法。例如,把100 個(gè)點(diǎn)的前10個(gè)點(diǎn)畫(huà)成一條Bezier曲線,使用方法如下:
Canvas::PolyBezier(Slice(PointArray,10));
TPanvas::PolyBezierTo
畫(huà)一簇Bezier曲線并更新PenPos的值。
void__fastcall PolyBezierPo(const tagPOINT* Points ,const inty Points_Size );
PolyBezierTo 用于根據(jù) Points 參數(shù)指定的控制點(diǎn)畫(huà)三次 Bezier 曲線 。其中第一條曲線經(jīng)過(guò)第一、第四點(diǎn),2、3點(diǎn)為控制點(diǎn)。按順序,每條曲線需至少四個(gè)點(diǎn);上一曲線的終點(diǎn)為下一曲線的開(kāi)始點(diǎn),緊接著的兩個(gè)點(diǎn)為控制點(diǎn),第四點(diǎn)為終點(diǎn)。畫(huà)線時(shí)使用當(dāng)前的筆并把 PenPos 更新為最后一個(gè)點(diǎn)的值。
可以使用Slice函數(shù)把點(diǎn)數(shù)組傳給PokybezierTo方法。例如,把100個(gè)點(diǎn)的數(shù)組的前10個(gè)畫(huà)成一條Brzier曲線,使用方法如下:
Canvas::PolyBezierTo(Slice(PointArray,10));
TCanvas::Polygon
在畫(huà)布上畫(huà)出鏈接所有點(diǎn)的一系列直線,并且畫(huà)出一條從最后一點(diǎn)到起始點(diǎn)的直線以閉合圖形。
void __fastcall Polygon( const tagPOINT* Plints const int Points_Size ) ;
使用Polygon, 通過(guò)畫(huà)筆可以在畫(huà)布上畫(huà)出一個(gè)閉合的多邊形。畫(huà)出完整圖形之后,Polygon 還用Brush屬性的數(shù)值自動(dòng)填充圖形。當(dāng)需要畫(huà)一個(gè)多邊形而又不需要填充時(shí),可以調(diào)用Polyline方法,只需要結(jié)尾處第二次指定起始點(diǎn)即可。
使用Slice函數(shù),可以將點(diǎn)數(shù)組的一部分傳遞給Polygon 方法。例如 ,以100個(gè)點(diǎn)的數(shù)組中的開(kāi)始 10 個(gè)點(diǎn)畫(huà)出一個(gè)多邊形,可以像以下方法使用Slice函數(shù):
Canvas::Polygon::(Slice(PointAeeay,10)。
TCanvas ::Polyline
以當(dāng)前畫(huà)筆在畫(huà)布上畫(huà)出一系列鏈接點(diǎn)數(shù)組中的每一個(gè)點(diǎn)的直線。
void __fastcall Polyline(const tagPOINT* Points.const int Points_Size ) ;
使用 Pilyline 可以在畫(huà)布上鏈接一系列的點(diǎn)。如果僅有兩個(gè)點(diǎn),Polyline僅畫(huà)出一條直線。調(diào)用MoveTo 功能,將畫(huà)筆位置移到第一個(gè)點(diǎn),然后用后面所有的點(diǎn)重復(fù)調(diào)用 LineTo,可以在畫(huà)布上畫(huà)出與調(diào)用 Pokyline 一樣的圖形。然而,與 LineToi不同的是,Polyine過(guò)程不能改變畫(huà)筆位置數(shù)值。
使用Slice函數(shù),可以將點(diǎn)數(shù)組的一部分傳遞給Polyline方法。例如,為了鏈接100個(gè)點(diǎn)數(shù)組中的開(kāi)始10個(gè)點(diǎn),可按以下方法使用Slice函數(shù):
Canvas::Polyine::(Slice(PointArray,10).
TCanvas::Rectangle
可以在畫(huà)布上畫(huà)出一個(gè)矩形,矩形的左上角為點(diǎn)(x1, y1) ,右下角為點(diǎn)(x2, y2)。
void__fastcall Rectangle(int X1, int Y1, int X2, int Y2, );
調(diào)用Rectangle過(guò)程,使用畫(huà)筆畫(huà)出一個(gè)矩形,并且用刷子進(jìn)行填充。如要填充一個(gè)矩形區(qū)域而又不需用當(dāng)前畫(huà)筆畫(huà)出邊線時(shí),應(yīng)使用FillRect方法。如果需要沒(méi)有填充的矩形區(qū)域輪廓,應(yīng)使用FrameRect方法或者Polygon方法。如果需要畫(huà)出一個(gè)圓角的矩形,應(yīng)使用RoundRect方法。
TCanvas::Refresh
從設(shè)備場(chǎng)境里刪除Pen、Brush以及Font。
void__fastcall Refresh (void);
調(diào)用Refresh可以使畫(huà)布使用的HDC回到缺省狀態(tài)。Refresh不會(huì)改變Pen屬性、Brush屬性以及Font屬性的數(shù)值。調(diào)用Refresh后,如果HDC是被作圖方法使用的話,那么任何作圖方法的調(diào)用,將需要為HDC重新選擇Brush、Font或者Pen。
TCanvas::RoundRect
可以在畫(huà)布上畫(huà)出一個(gè)圓角的矩形。
void__fastcall RoundRect (int X1, int Y1, int X2, int Y2, int X3, int Y3);
調(diào)用RoundRect可以使用畫(huà)筆畫(huà)出一個(gè)圓角的矩形,并且用刷子進(jìn)行填充。矩形的邊由點(diǎn)(x1, y1)、點(diǎn)(x2,y1)、點(diǎn)(x2,y2)和點(diǎn)(x1,y2)確定。矩形的角被修剪以形成圓的外觀。畫(huà)一個(gè)橢圓,使用Ellipse方法。畫(huà)一個(gè)真正的矩形,使用Rectangle方法。
TCanvas::StretchDraw
在由Rect參數(shù)指定的矩形區(qū)域內(nèi),畫(huà)出由Graphic參數(shù)指定的圖像。
void __fastcall StretchDraw (const Windows::TRect& Rect, TGraphic* Graphic);
調(diào)用StretchDraw在畫(huà)布上畫(huà)出一個(gè)圖像,以便使圖像與指定的矩形區(qū)域相適應(yīng)。StretchDraw過(guò)程調(diào)用圖像的Draw方法。圖像決定了如何使圖像與矩形區(qū)域相適應(yīng)。這可能包括放大或者縮小比例。為了使圖像能夠按其原先尺寸畫(huà)出,應(yīng)使用Draw方法。 圖像可以是點(diǎn)位圖、圖標(biāo)或者位圖文件。如果圖像是TBitmap對(duì)象,點(diǎn)位圖使用CopyMode屬性的數(shù)值畫(huà)出。
TCanvas::TCanvas
創(chuàng)建一個(gè)TCanvas對(duì)象的實(shí)例。
__fastcall TCanvas(void);
不要直接調(diào)用TCanvas構(gòu)造函數(shù),用new來(lái)實(shí)例化一個(gè)TCanvas對(duì)象。 TCanvas為T(mén)Canvas的實(shí)例分配內(nèi)存,并且為Font、Brush和Pen屬性創(chuàng)建TFont、TBrush和TPen對(duì)象。TCanvas還將CopyMode方法初始化為cmSrcCopy。
TCanvas::TextExtent
返回以當(dāng)前字體表示的字符串的像素寬度和像素高度。
tagSIZE __fastcall TextExtent(const System::AnsiString Text) ;
使用TextExtent 可以確定字符串在圖片上占用的空間。在圖片上的諸如線條、框架以及文本的附加線等單元被放在適當(dāng)?shù)奈恢茫匀菁{文本大小。僅檢查文本高度,調(diào)用 TextHeight 方法。僅檢查文本的寬度,調(diào)用TextWidth方法。
TCanvas::TextHeight
返回以當(dāng)前字體表示的字符串的像素高度。
int __fastcall TextHeight(const system::AnsiString Text );
使用TextHeight可以確定字符串在圖片上占用的高度。在圖片上的諸如線條、框架以及文本的附加線等單元被放在適當(dāng)?shù)奈恢茫匀菁{文本的高度。TextHeight 函數(shù)返回與TextExtent(Text )::cy 相同的數(shù)值。
TCanvas::TextOut
在畫(huà)布上從點(diǎn)(x,y)處開(kāi)始輸出一個(gè)字符串,同時(shí)將畫(huà)筆位置修改為字符串的結(jié)束位置。
void __fastcsll TextOut( int X, int Y, const System::AnsiString text ) ;
使用TextOut 可以向畫(huà)布上輸出一個(gè)字符串。按字體的當(dāng)前數(shù)值輸出字符串。使用 TextExtent 能夠確定出文本在圖片上的占用空間。為了輸出僅與剪切矩形區(qū)域相適應(yīng)的文本,應(yīng)使用權(quán)TextRect 方法 。
TCanvas::TextRect
在一個(gè)剪切矩形區(qū)域內(nèi)輸出一個(gè)字符串。
void __fastcall TextRect(const Windows::TEect& Rect,int X,int Y,const System::AnsiString Text);
使用TextRect可以在一個(gè)限制的矩形區(qū)域內(nèi)輸出一個(gè)字符串。字符串落在由Rect 參數(shù)指定的矩形區(qū)域外的任何部分將被剪切且不顯示。文本的左上角位于點(diǎn)(X,Y) 。
TCanvas::TextWidth
返回以當(dāng)前字體表示的字符串的像素寬度。
int __fastcall TextWidth(const system::AnsiString Text);
使用TExtWidth 可以確定字符串在圖片上占用的長(zhǎng)度。TextWidth 函數(shù)表明給出的字符串是否與可用空間相適應(yīng)。在圖片上的諸如線條、框架以及文本有附加線等單元被放在適當(dāng)?shù)奈恢茫匀菁{文本的寬度,Textwidth返回與TextExtent(Text)::cx相同的數(shù)值。
TCanvas::TryLock(void);
除非調(diào)用了 UnLock 方法,否則調(diào)用 TryLock 可以避免其他線條在畫(huà)布表面上輸出。調(diào)用Lock方法需要配套使用,每調(diào)用一次 Lock 方法必須一后面調(diào)用 UnLock 方法相匹配。如果畫(huà)布沒(méi)有鎖定,那么對(duì)TryLock函數(shù)的調(diào)用僅需與調(diào)用一次UnLock方法相匹配。如果畫(huà)布是開(kāi)啟的,調(diào)用TryLock函數(shù)將鎖守畫(huà)布,將LockCount 屬性值設(shè)為1、返回True 值。如果畫(huà)布被鎖定,調(diào)用TryLock 函數(shù)不產(chǎn)生任何變化,返回False值。
在試圖改變畫(huà)布之前,調(diào)用 TryLock 函數(shù)可能妨礙由 Lock 和 UnLock 平共處成對(duì)調(diào)用方法保護(hù)的其他代碼的執(zhí)行。
TCancas::__fastcall Unlock(void);
使 LockCount 屬性值減少,并且允許其他線條輸出直至LockCount屬性值為0。
void __fastcall UnLock(void) ;
在以調(diào)用 Lock 方法開(kāi)始的臨界區(qū)的結(jié)尾處調(diào)用 UnLock 過(guò)程。每一個(gè)對(duì) Lock方法的調(diào)用,必須與調(diào)用 UnLock 方法相匹配。
TCanvas::OnChange
當(dāng)畫(huà)布上的圖像剛發(fā)生變化時(shí),OnChange事件發(fā)生。
__property Classes::TNotifyEvent OnChange = {read =FOnChange, write = FOnChange };
每當(dāng)畫(huà)布上的圖像發(fā)生變化時(shí),寫(xiě)OnChange事件處理程序以執(zhí)行特定的行為。應(yīng)用程序調(diào)用TCanvas對(duì)象的一個(gè)作圖方法時(shí),引起下列變化:
?產(chǎn)生一個(gè)OnChanging事件。
?調(diào)用TCanvas方法,使圖像發(fā)生變化。
?產(chǎn)生一個(gè)OnChange事件。
OnChange事件是在圖像產(chǎn)生變化時(shí)產(chǎn)生,而不是畫(huà)布屬性產(chǎn)生變化時(shí)產(chǎn)生。應(yīng)用程序中對(duì)Font屬性Brush屬性和Pen屬性的變化,可以通過(guò)設(shè)定OnChange事件處理程序以產(chǎn)生相應(yīng)的TFont對(duì)象、TBrush 對(duì)象和TPen對(duì)象。然而,TCanvas對(duì)象為這些對(duì)象設(shè)定了其自身的OnChange事件處理程序。在指定這些對(duì)象的OnChange事件處理程序之前,首先讀出現(xiàn)在的事件處理程序。使用讀出的數(shù)值。從新事件處理程序調(diào)用TCanvas對(duì)象的事件處理程序。
TCanvas ::OnChanging
當(dāng)畫(huà)布上的圖像剛要發(fā)生變化時(shí),OnChanging事件發(fā)生。
__propenty CIasses::TNotifyEvent OnChanging = {read =FOnChanging, write = RonXhanging};
在畫(huà)布上的圖像發(fā)生變化之前,寫(xiě)OnChanging事件處理程序以執(zhí)行特定的行為。當(dāng)應(yīng)用程序調(diào)用TCanvas對(duì)象的一個(gè)作圖方法時(shí),引起下列變化:
?一個(gè)OnChanging事件發(fā)生。
?調(diào)用TCanvas方法,使圖像發(fā)生變化。
?一個(gè)OnChange事件發(fā)生。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注