資源描述:
《delphi中實(shí)現(xiàn)控件的深度投影及陰影效果》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、delphi中實(shí)現(xiàn)控件的深度投影和陰影效果在WINDOWS應(yīng)用程序的窗口及其窗口內(nèi)的按鈕等控件,其本身都具有立體感效果,特別是在WINDOWS95系統(tǒng)下DELPHI程序設(shè)計(jì)中,立體效果更加完善,程序界面尤如真實(shí)物體的存在。盡管如此,它還是不能完全滿足所有場(chǎng)合的程序設(shè)計(jì)需要,比如你要使一個(gè)控件具有一個(gè)陰影效果,或者使一個(gè)控件顯示出深度投影效果,就必須依靠其它程序設(shè)計(jì)手段。這里有一個(gè)可利用的CANVAS類,它可以輕松的完成這些特殊效果程序界面的繪制工作。 CANVAS(畫(huà)布)是DELPHI中為某些控件所定義的一個(gè)類,它允許在控件表面進(jìn)行靈活的繪圖操作或信息顯
2、示,并且適用于多種控件,如FROM、IMAGE、FILELISTBOX等,為美化程序界面提供了非常方便的方法;CANVAS具有多種屬性并支持多種操作命令,可以實(shí)現(xiàn)在指定的對(duì)象上畫(huà)點(diǎn)、畫(huà)線、畫(huà)多邊形、畫(huà)扇形、畫(huà)圓、定義畫(huà)筆特性、輸出各種字符串等多種功能。控件的陰影及投影效果的形成,基本原理就是在利用該控件的父控件比如FORM或者其它容器控件的CANVAS,在該控件的周圍適當(dāng)處填加圖像,通過(guò)線條及顏色的合理搭配,使控件與周圍的圖像融為一體,形成特殊的視覺(jué)效果。所需要的CANVAS命令如下: form1.canvas.pen.width:定義畫(huà)筆的寬度 f
3、orm1.canvas.pen.color:定義畫(huà)筆的顏色 form1.canvas.moveto:定義畫(huà)線起點(diǎn)坐標(biāo) form1.canvas.lineto:定義畫(huà)線終點(diǎn)坐標(biāo) 具體操作時(shí)需要根據(jù)被修飾控件的TOP、LEFT、WIDTH、HEIGHT屬性,確定需要畫(huà)線的起點(diǎn)和終點(diǎn)坐標(biāo),這樣操作無(wú)論被修飾控件位置及尺寸如何變化,都可以保證投影及陰影效果完美的實(shí)現(xiàn)?! ∠旅媸且粋€(gè)簡(jiǎn)單的演示程序,在窗體中安放三個(gè)命令按鈕控件Button1、Button2、Button3,然后輸入下面.PAS文件中的相應(yīng)代碼,程序運(yùn)行之后按下命令按鈕2,則為按鈕1增加投影效果
4、,按下命令按鈕3為按鈕1增加陰影效果,按下按鈕1則程序結(jié)束。上述方法可靈活應(yīng)用在DELPHI程序界面設(shè)計(jì)之中,實(shí)現(xiàn)一些屏幕特技效果,會(huì)極大增強(qiáng)程序工作界面的生動(dòng)性。其中有一點(diǎn)需要注意,當(dāng)程序窗口發(fā)生變化時(shí)(最大化或最小化),其投影及陰影效果可能會(huì)被破壞,此時(shí)需要重畫(huà)以保證程序界面的完整性,所以在程序中應(yīng)該適當(dāng)安排窗口變化監(jiān)視功能?! 〕绦蛟?86機(jī)、WINDOWS95中文版、DELPHI2.0環(huán)境下調(diào)試通過(guò),附.PAS文件內(nèi)容?! nitcan; interface uses Windows,Messages,SysUtils,Classes,Gr
5、aphics,Controls,F(xiàn)orms,Dialogs,StdCtrls; type TForm1=class(TForm) Button1:TButton;Button2:TButton;Button3:TButton; procedureButton2Click(Sender:TObject); procedureButton3Click(Sender:TObject); procedureButton1Click(Sender:TObject); procedureFormCreate(Sender:TObject); priva
6、te??????{Privatedeclarations} public??????{Publicdeclarations} end; var Form1:TForm1; x,y,i:integer; implementation {$R*.DFM} ?。队靶Ч男纬桑 rocedureTForm1.Button2Click(Sender:TObject); begin form1.canvas.pen.width:=1; fori=0to8do begin form1.canvas.pen.color:=$00a0a0a0;
7、 form1.canvas.moveto(Button1.left+Button1.width+x,Button1.top+y); form1.canvas.lineto(Button1.left+Button1.width+x,Button1.top+button1.height+y); form1.canvas.pen.color:=$00606060; form1.canvas.moveto(Button1.left+x,Button1.top+Button1.height+y); form1.canvas.lineto(Button1.l
8、eft+Button1.width+x,Button1.top+b