我們在開發軟體過程中,為提高軟體的商品化程度,感覺到介面的美觀程度是一個軟體能否獲得成功的一個重要因素,我們仔細研究了一些成功的商品化軟體,從這些軟體上可以看到,程式視窗背景能顯示出非常美麗的、富有立體感的花紋。而採用VisualBasic3.0或4.0進行窗體設計,若只依照系統提供的功能,只能從有限的幾種顏色中選擇一種顏色或採用程式繪製一些簡單的線條。而想實現立體感很強的紋理圖案,一般只能採用窗體的PICTURE屬性調用位圖文件,使用這種方法實現有許多缺點,其一是窗體大小受位圖大小的限制,調整起來麻煩,不具通用性和靈活性;其二是浪費資源,因為花紋圖案基本上是重複圖案,採用與窗體同樣大小的位圖是一種浪費。
以下介紹一種窗體背景花紋實作的方法。在窗體上建立一個網格控件,設定網格行不可見,去掉固定行和固定列,用程式實現網格控件與窗體同樣大小,並隨窗體大小的改變而改變。接著設計一個花紋圖案,形成BMP位圖檔案(本文程式使用檔案Pict1.bmp),或從其它圖像中截取一段圖案,也可以利用Windows系統提供的圖案(如c:/windows/Tiles.bmp) ,將其調入Picture控制項。設定網格的每個單元與該圖案大小相同,使單元的數量剛好覆蓋整個窗體背景,然後再將所有單元顯示該圖案。透過子程式Backpict()實現上述過程,無論圖案大小、窗體大小,程式都能自動調整網格控制項大小及網格單元大小及單元數。該程式在VisualBasic4.0上調試成功。
1.新建窗體Form1,屬性如下:
Caption=“背景花紋的實現”
Borderstyle=3(無最大、最小化按鈕)
2.建網格控制項Grid1,它的位置和大小將在程式中設定(與Form1同樣大),屬性為:
Enabled=False(焦點不會落在網格控制項Grid1上)
Fillstyle=1(改變所有單元Text特性)
Fixedcols=0(無固定行)
Fixedrows=0(無固定列)
Gridlines=False(網格行不可見),
Visible=True
3.建立圖象控制Picture1,程式運行時將背景花紋基本圖案放入其中,屬性為
Visible=False(不可見)
Autosize=True(自動調整大小)
4.控制項中加入Sheridan3DControls,選取其中的三維指令按鈕SSCommand,建立兩個按鈕
SSCommand1.Caption=“退出”
SSCommand2.Caption=「更換背景」(示範不同的背景圖案)
它們的屬性Picture可呼叫與背景相同或不同的圖案,若使用普通的指令按鈕控制Command也可,只是指令按鈕無背景圖案。
5.建立背景圖案形成子程式:
DimpictfileAsString'點陣圖檔名
DimFILEPATHAsString'檔案路徑
SubBackpict(pictfile)
picture1.ScaleMode=3
Form1.ScaleMode=3
picture1.Picture=LoadPicture(pictfile)
'網格控制覆蓋整個窗體背景
grid1.Top=-1
grid1.Left=-1
grid1.Width=Width
grid1.Height=Height
grid1.Cols=Int(Form1.ScaleWidth/picture1.ScaleWidth) 1
grid1.Rows=Int(Form1.ScaleHeight/picture1.ScaleHeight) 1
'所有單元大小等於基本圖案大小
ForI=0Togrid1.Cols-1
Forj=0Togrid1.Rows-1
grid1.ColWidth(I)=picture1.ScaleWidth*15
grid1.RowHeight(j)=picture1.ScaleHeight*15
Nextj
NextI
'選定所有單元
grid1.SelStartCol=0
grid1.SelStartRow=0
grid1.SelEndCol=grid1.Cols-1
grid1.SelEndRow=grid1.Rows-1
grid1.Picture=Picture1.Picture
EndSub
6.窗體主程序
PRivateSubForm_Load()
PrivateSubForm_Load()
'得到運行程式路徑名,路徑名後帶反斜杠
IfRight(App.Path,1)<>"/"Then
filePath=App.Path&"/"
Else
filePath=App.Path
EndIf
'窗體初始顯示由Tiles.bmp基本圖案組成的背景
pictfile="c:/windows/Tiles.bmp"
backpict(pictfile)
EndSub
7.退出程序命令按鈕
PrivateSubSSCommand1_Click()
End
EndSub
8.示範不同的底紋圖案
PrivateSubSSCommand2_Click()
'兩種背景圖案交替演示
Ifpictfile=filePath&"Pict1.bmp"Then
pictfile="c:/windows/Tiles.bmp"
Else
pictfile=filePath&"Pict1.bmp"
EndIf
Backpict(pictfile)
EndSub->