- 相關(guān)推薦
Delphi中畫(huà)布應(yīng)用兩則
關(guān)鍵字:Delphi、畫(huà)布、背景色、分割圖像---- 在Delphi 中, 窗 體(Form)、BitBtn 控 件、SpeedButton 控件和PaintBox等控件都具有畫(huà)布(Canvas)屬性。調(diào)用Canvas的作圖函數(shù)可以在屏幕上畫(huà)圖,如畫(huà)圓、畫(huà)線等。另外,Canvas有一個(gè)屬性叫Pixels,Pixels是一個(gè)二維數(shù)組,它的一個(gè)元素對(duì)應(yīng)著屏幕上的一個(gè)像素點(diǎn),數(shù)組元素的值代表像素點(diǎn)的顏色。利用Canvas的屬性Pixels可以實(shí)現(xiàn)一些有趣的功能,下面介紹它的兩則應(yīng)用。
----1.制作背景色
----我們?cè)谝恍┸浖陌惭b界面可以看到由深到淺(或由淺到深)的背景色,看起來(lái)效果相當(dāng)不錯(cuò)。在Delphi中利用Canvas的屬性Pixels可以制作這樣的背景色,只要按行或按列改變像素點(diǎn)的顏色就可以了。一個(gè)示例程序的編制過(guò)程如下:
----(1)建立一個(gè)新的應(yīng)用程序。
----(2)把Form1的屬性BorderStyle改為bsNone,在Form1的OnDblClick事件中,鍵入代碼后如下所示:
procedureTForm1.FormDblClick(Sender:TObject);
varMyColor:Longint;
x,y:Word;
begin
MyColor:=$33;{顏色基數(shù)}
withCanvasdo
begin
{當(dāng)x坐標(biāo)在外循環(huán),y坐標(biāo)在內(nèi)
循環(huán)時(shí),顏色按列逐漸變化;反之則按行變化}
forx:=0toWidthdo
begin
ifxmod4=0then{每隔4列變化一次顏色}
begin
MyColor:=MyColor 1;{顏色增量為1}
end;
fory:=0toHeightdo
begin
Pixels[x,y]:=RGB(0,0,MyColor);
{用API函數(shù)宏RGB合成顏色}
end;
end;
end;
end;
----(3)運(yùn)行程序,在窗體中雙擊鼠標(biāo)左鍵,觀看運(yùn)行結(jié)果。
----(4)按Alt F4鍵,結(jié)束運(yùn)行。
----以上程序在24位色、800*600的分辨率下調(diào)試通過(guò)。
----2.分割圖像
----有時(shí)候我們需要把一個(gè)圖像分割成幾部分。比如做一個(gè)拼版游戲時(shí),就需要把圖像分割成16塊。利用Canvas的屬性Pixels可以實(shí)現(xiàn)這一功能。下面的例子演示了如何把Image控件中的圖像分成左右兩部分并把它們復(fù)制到窗體的畫(huà)布上。本示例程序的制作步驟如下:
----(1)建立一個(gè)新的應(yīng)用程序。
----(2)在窗體中加入一個(gè)Image控件,名字為Image1。把屬性Picture設(shè)置為Delphi目錄下的ImageButtonsAbort.bmp。
----(3)在類(lèi)TForm1的private部分,加入語(yǔ)句:
procedureDivideCanvas(formBegX,
ImageBaseX,HalfImageWidth:Integer);
在單元的implementation部分加
上過(guò)程DivideCanvas的實(shí)現(xiàn)。
procedure
TForm1.DivideCanvas(formBegX,
ImageBaseX,HalfImageWidth:Integer);
varx,y:integer;
begin
forx:=0toHalfImageWidth-1do
begin
fory:=0toImage1.Height-1do
begin
Canvas.Pixels[formBegX x,y]:=
Image1.Canvas.Pixels[ImageBaseX x,y];
end;
end;
end;
----(4)在Form1的OnPaint事件中,加入代碼后如下所示:
procedureTForm1.FormPaint(Sender:TObject);
varHalfImageWidth:integer;
begin
HalfImageWidth:=Image1.Widthdiv2;
DivideCanvas(0,0,HalfImageWidth);
{復(fù)制圖像的左半部分}
DivideCanvas(HalfImageWidth 50,
HalfImageWidth,HalfImageWidth);
{復(fù)制圖像的右半部分}
end;
----(5)運(yùn)行程序進(jìn)行測(cè)試。
----以上兩個(gè)演示程序在Delphi6.0和Delphi7.0中均調(diào)試通過(guò)。論文出處(作者):
VBA在限定Excel工作表用戶按鈕中的應(yīng)用
淺析規(guī)劃管理信息整合與服務(wù)——以南昌市規(guī)劃管理信息系
【Delphi中畫(huà)布應(yīng)用】相關(guān)文章:
在Delphi中巧用Windows 的API函數(shù)03-20
Delphi 5 數(shù)據(jù)庫(kù)應(yīng)用中ODBC數(shù)據(jù)源的自動(dòng)管理03-18
利用Delphi開(kāi)發(fā)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)應(yīng)用03-03
基于Delphi的試卷智能生成系統(tǒng)設(shè)計(jì)Delphi+SQL11-23
文件自動(dòng)分類(lèi)系統(tǒng)Delphi03-08
淺析力學(xué)在機(jī)械中的應(yīng)用05-19