我們在開發軟件過程中,為提高軟件的商品化程度,感覺到界面的美觀程度是一個軟件能否獲得成功的一個重要因素,我們仔細研究了一些成功的商品化軟件,從這些軟件上可以看到,程序窗口背景能顯示出非常美麗的、富有立體感的花紋。而采用VisualBasic3.0或4.0進行窗體設計,若只按照系統提供的功能,只能從有限的幾種顏色中選擇一種顏色或采用程序繪制一些簡單的線條。而想實現立體感很強的紋理圖案,一般只能采用窗體的PICTURE屬性調用位圖文件,使用這種方法實現有許多缺點,其一是窗體大小受位圖大小的限制,調整起來麻煩,不具有通用性和靈活性;其二是浪費資源,因為花紋圖案基本上是重復圖案,采用與窗體同樣大小的位圖是一種浪費。
下面介紹一種窗體背景花紋實現的方法。在窗體上建立一個網格控件,設定網格行不可見,去掉固定行和固定列,用程序實現網格控件與窗體同樣大小,並隨窗體大小的改變而改變。然後設計一個花紋圖案,形成BMP位圖文件(本文程序使用文件Pict1.bmp),或者從其它圖象中截取一段圖案,也可以利用Windows系統提供的圖案(如c:windowsTiles.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:windowsTiles.bmp"
backpict(pictfile)
EndSub
7.退出程序命令按鈕
PrivateSubSSCommand1_Click()
End
EndSub
8.演示不同的底紋圖案
PrivateSubSSCommand2_Click()
`兩種背景圖案交替演示
Ifpictfile=filePath&"Pict1.bmp"Then
pictfile="c:windowsTiles.bmp"
Else
pictfile=filePath&"Pict1.bmp"
EndIf
Backpict(pictfile)
EndSub->