我們在設計一個VB窗體時,常常放上許多控件,為了使這些控件看上去整整齊齊,我們不得不設置一大堆Left、Top、Height、Width屬性,您是否已經感到厭煩並想轉向Powerbuilder或Delphi等別急,讓我們現在就來擴展一下VB的功能。
VB4.0提供了一個新功能:Add-Ins,利用這一功能我們就可以把自己的程序加到VB4的系統菜單Add-Ins裡去,作為VB的擴展功能。我們設計的程序將具有以下功能:選取窗體上某些控件後,通過菜單選取,使它們大小相同、間距相同、邊緣對齊等等。有了這些功能,我們設計界面時就能節省大量時間,大大提高工作效率。限於篇幅,這裡只介紹其中一個功能:使所選取控件從左到右大小相同。理解了這段程序,其它功能就很容易實現了。首先建一個新項目:alignment.mark,不需要任何窗體,在Tools菜單裡選Project Options, 將 Project Name設為Exam”,將Start Mode設為Object Application後退出。然後在菜單Ins ert裡選取ClassModule,建立一個新類,屬性設置如下:
Name=HSizeAlign;Creatable=False;Public=True 輸入以下程序:
Public VBInstance As Object ’當前所運行的VB Private TheseControls As Object Private Control As Onject ’控件對象變量 Private AllHeight As Long Private AllWidth As Long Private MinLeft As Long ’標記最左邊界值 Public Sub AfterClick() MinLeft=99999 ’設一極大初值 Set ThereControls = VBInstance.ActiveProject.Ac - tiveForm.SelectedControlTemplates For Each Control In TheseControls If Control.Properties(Left)<MinLeft Then AllHeight=Control.Properties(Height) AllWidth=Control.Properties(Width) MinLeft=Control.Properties(Left) End If Next For Each Control In TheseControls Control.Properties(Height)=AllHeight Control.Properties(Width)=AllWidth Next End Sub
再定義一個新類,屬性設置如下:
Name=Alignment;Creatable=True;Public=True Dim ThisInstance As Object Dim HSizeAlignMenu As Object Dim HSizeAlignHandler As New HSizeAlign Dim HSizeConnectCookie As Long Sub ConnectA n(VBInstance As Object) ’加入菜單項,進行連接 Set ThisInstance=VBInstance Set HSizeAlignMenu=ThisInstance.AddinMenu. MenuItems.Add(HSize Alignment) Set HSizeAlignHandler.VBInstance=ThisInstance HSizeConnectCookie=HSizeAlignMenu.ConnectEvents (HSizeAlignHandler) End Sub Sub DisconnectAddIn(Mode As Integer) ’解除連接,刪除菜單項 HSizeAlignMenu.DisconnectEvents HSizeConnect-Cookie ThisInstance.AddinMenu.MenuItems.Remove HSizeAlignMenu End Sub 再加入一個Module,輸入以下程序: Declare Function WritePrivateProfileString Lib KERNEL(ByVal AppName$,ByVal KeyName$,ByVal keydefault$,ByVal FileName$) Declare Function GetPrivateProfileString Lib KERNEL(ByVal AppName$,ByVal KeyName$,ByVal keydefault$,ByVal ReturnString$,By Val NumBytes As Integer,ByVal FileName$) ’以上說明可用API Text Viewer拷貝 Sub Main() Dim ReturnString As String Section$=Add-Ins16 ReturnString=String$(255,Chr$(0)) ErrCode=GetPrivateProfileString(Section$, Exam.Alignment,NotFound,ReturnString,Len(ReturnString)+1,VB.INI) If Left(ReturnString,InStr(ReturnString,Chr(0))-1)=NotFoundThen ErrCode=WritePrivateProfileString%(Section$,Exam.Alignment,0,VB.INI) End If End Sub
Exam.Alignment裡,Exam”為項目名,Alignment”為與Add-In菜單連接的類名。以上程序編譯運行後,在VB菜單Add-Ins裡選取Add-In Manager,將彈出一對話框,選取Exam. Alignment後退出,Add-Ins菜單裡就多了一項HSize Alignment;使用時先選取所需排列控件,然後選此菜單項即可。本程序的運行環境為:VB4.0,Windows3.1;486 DX2/66 8M。