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