版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chinahuyong/article/details/4046152
8.圖形類元件
59)問:Windows是一個圖形系統,C++Builder是怎樣處理圖形的呢?
答:C++Builder通過提供圖形元件來處理圖形,其中比較常用的有圖像元件(Image)、幾何圖形元件(Shape)和畫闆元件(PaintBox)。前兩個元件位于Additional頁中,畫闆元件位于System頁中。
在BCB中,Form、Image、BitMap、PaintBox等都具有繪圖能力,這些元件中都有Canvas屬性。
60)問:圖像控件有哪些特殊的屬性?
答:圖像元件可以顯示各種以檔案形式存儲在磁盤上的圖形。它有這樣一些特殊的屬性。
AutoSize屬性,當屬性值為True時,圖像元件會自動調節尺寸以便适應圖像元件的大小。預設值為True。
Stretch屬性,當該屬性為True時,圖像的尺寸自動調整并填滿整個圖像元件的範圍。但ICO檔案無法産生這種效果。預設值為False。
Transparent屬性,确定是否允許圖像中指定的顔色透明,進而使元件下面的物體顯示出來。預設值為False。
Center屬性,當該屬性為True時,圖像居中顯示;否則,從左上角開始顯示。
屬性Picture,你可以在設計階段利用這個屬性指定所要顯示的圖檔,也可以在運作期間再顯示。前面一種情況下,你可以單擊Picture屬性的Value列中的省略号
按鈕,這時會出現一個圖檔編輯對話框,單擊對話框中的Load按鈕就可以選擇載入要顯示的圖檔了。
61)問:如果是在程式運作期間載入圖檔,應該怎麼辦?
答:如果是在程式運作期間載入圖檔,那麼可以使用TPicture類的方法LoadFromFile,這個方法可以載入存儲在磁盤上的圖像檔案。例如要載入D盤根目錄下的picture.bmp,可以這樣調用:
Image1->Picture->LoadFromFile("d://picture.bmp");
這個控件可處理的圖檔檔案的類型有:.BMP檔案、.ICO檔案、.EMF和.WMF等多種圖像檔案。如果你試圖載入一種無法識别的檔案類型,将會産生異常錯誤。
62)問:能說一下AutoSize與Stretch的差別嗎?
答:好的,在窗體上放置兩個圖像元件,将左邊的圖像元件的AutoSize屬性為True,是以載入任何圖檔後,元件的尺寸與圖檔的尺寸完全相同。而且如果你增大或減小圖像元件的尺寸,圖檔的顯示仍然不變。将右邊的圖像元件的AutoSize屬性設定為False,将它的Stretch屬性設定為True。當你增大或減小圖像元件的尺寸,圖檔将按比例增大或縮小,也就是說圖檔始終充滿整個元件。
63)問:TShape控件有什麼重要屬性?
答:這個元件可以顯示一些常見的幾何圖形,例如矩形、圓、橢圓等。幾何圖形元件有幾個比較重要的屬性:Brush,Pen 和Shape。
Brush屬性,用來設定幾何圖形内部的填充特性,包括填充的圖案(Style)和顔色(Color)等。
Pen屬性,用來設定幾何圖形的外框特性,包括畫筆的顔色(Color)、線型(Style)和線寬(Width)及Mode關系等。
屬性Shape,用來指出所顯示的幾何圖形類型。這個屬性可以有六種不同的值,分别表示六種不同的幾何圖形;
(1)stEllipse表示橢圓。
(2)stRectangle表示矩形。
(3)stRoundRect表示圓角矩形。
(4)stRoundSquare表示圓角正方形。
(5)stSquare表示正方形。
(6)stCircle表示圓。
在設計階段,你可以使用滑鼠改變圖形的尺寸。在運作期間,可以通過Height和Width屬性改變圖形的尺寸。
64)問:屬性Brush前面有一個加号,它是什麼意思?
答:它表示這個屬性是可以展開的,也就是說,它還包含一些子屬性。單擊加号,可以發現它的子屬性是:Color和Style。
Color屬性包含一系列C++Builder預定義的顔色,你可以從中為顯示的幾何圖形選擇一種填充顔色。
Style屬性确定了幾何圖形的填充樣式,它可以分别取這樣8種值:bsBDiagonal, bsClear, bsCross, bsDiagCross, bsDiagonal, bsHorizontal, bsSolid和bsVertical。
屬性Pen也象屬性Brush一樣有子屬性。它的子屬性是Color, Mode, Style和Width。其中最常用的就是Style和Width,它們分别表示線型和線寬。子屬性Style可以取這樣一些值來畫邊框:
psSolid
表示實線。
psDash
表示破折号。
psDot
表示圓點。
psDashDot
表示破折号和圓點。
psDashDotDot
表示破折号、圓點、圓點。
psClear
表示沒有線。
psInsideFrame
表示内框實線。
65)問:這個畫闆元件有什麼作用?
答:畫闆元件主要為使用者提供一塊作圖區域,使用者可以使用繪圖語句在這個作圖區域上畫出各種不同的圖形。
要注意的是,由于畫闆元件沒有邊界,是以通常應該把它放在一個有邊界的容器類元件上。
畫闆元件主要使用Canvas屬性來進行繪圖工作。Canvas(畫布)是類TCanvas的對象,類TCanvas包含繪圖中使用的各種方法和屬性。下面我們首先介紹Canvas對象的各種屬性。
畫筆(Pen) Canvas對象中有一個畫筆成員,它确定繪制幾何圖形時使用的畫筆類型。剛才我們介紹了畫筆的線型和線寬。
畫筆的Color屬性是繪圖時使用的前景色。
畫筆的屬性Mode用來确定畫筆與螢幕上原有點的混合方式。可結合目前的顔色、螢幕的顔色或它們的反轉值,對線段的顔色重新定義。但不改變Color屬性。
它可以取這樣一些值:
pmBlack:表示用黑色繪圖;
pmWhite:表示用白色繪圖;
pmNot:畫筆繪制的點的顔色與原有的顔色相反;
pmCopy:畫筆用Color屬性中定義的顔色繪圖。
PmNotCopy:畫筆用Color屬性中定義的顔色的反轉色繪圖;
PmMergePenNot:畫筆用Color屬性中定義的顔色與螢幕顔色的反轉色結合後繪圖;
PmMaskNotPen:畫筆用螢幕顔色與Color屬性中定義的顔色結合後繪圖;
PmMergeNotPen:畫筆用螢幕顔色與Color屬性中定義的顔色的反轉值結合後繪圖。
Brush屬性,刷子屬性在前面已經詳細介紹過,它可以确定圖形的填充模式和填充顔色。
屬性ClipRect,用來确定繪圖區域的範圍。任何超出這個範圍的圖形不會顯示。
66)問:在Canvas對象上,我們可以用怎樣的方法來完成作圖工作?
答:Canvas對象有一些基本做圖方法:
1.首先是MoveTo方法,MoveTo将筆的目前位置設定到點(x,y)處,筆的目前位置将儲存到PenPos屬性中,要注意的是,改變筆的目前位置用MoveTo方法,而不要修改PenPos屬性。函數形式為MoveTo(x,y)。
2.LineTo方法,用來完成從目前位置畫一條直線至點(x,y),并把筆的位置移動到這一點。函數形式為LineTo(x,y)。
在畫線時一般首先使用方法MoveTo移動線的起始點,然後再使用方法LineTo畫直線。
3.方法Rectangle用來在畫布上用目前畫刷繪制矩形,其中x1,y1是矩形的左上角坐标,x2,y2是矩形的右下角坐标。因為正方形實際上就是一種特殊的矩形,是以你可以使用這個方法畫出正方形。函數形式為Rectangle(x1,y1,x2,y2)。
4.方法Ellipset用來在畫布上給定的矩形邊界上畫一個橢圓,其中x1,y1是邊界矩形的左上角坐标,x2,y2是邊界矩形的右下角坐标。所謂邊界矩形就是圓或橢圓的外接矩形。函數形式為Ellipse(x1,y1,x2,y2)。
5.方法RoundRect用來繪制圓角矩形:其中x1,y1,x2,y2分别是圓角矩形虛拟的左上角和右下角。x3,y3是圓角的長短半徑。函數形式為RoundRect(x1,y1,x2,y2)。
6.方法Polygon可以畫出多邊形。函數形式為Polygon(Tpoint p,int Point_Size)。
參數P是類Tpoint的一個數組,每一個Tpoint對象包含一個點的X和Y坐标。Points_Size用來訓示數組的大小。這個是實心多邊形,Polyline是畫多邊形的,二者用法基本相同。
67)問:在顯示區域輸出文本資訊,我們是不是還象DOS下用printf函數來實作?
答:printf是一個控制台函數,不能在視窗程式中使用,一般我們TextOut輸出文本,其聲明:void _fastcall TextOut(int X,int Y,const AnsiString Text);其中x,y是輸出字元串起始點的坐标,text是要輸出的文本。當然你要用Lable也是可以的J