top
Loading...
讓VB自動改變控件大小
當窗體大小改變時,如何動態的改變控件的大小是許 多VB程序員頭痛的事。有的人設置窗體Resizable但卻不改變控件的大小;有的人則根據控件 的絕對位置與窗口大小相加減的辦法來重新定位控件與改變大小,這種辦法比較繁瑣,且不 可重用;當然也有人則限定窗口干脆不讓改變。有沒有一種簡便易行的辦法?答案是肯定的, 下面給出一個一勞永逸的辦法,源程序如下:
OptionExplicitPrivateFormOldWidthAsLong保存窗體的原始寬度PrivateFormOldHeightAsLong保存窗體的原始高度在調用ResizeForm前先調用本函數PublicSubResizeInit(FormNameAsForm)DimObjAsControlFormOldWidth=FormName.ScaleWidthFormOldHeight=FormName.ScaleHeightOnErrorResumeNextForEachObjInFormNameObj.Tag=Obj.Left&""&Obj.Top&""&Obj.Width&""&Obj.Height&""NextObjOnErrorGoTo0EndSub按比例改變表單內各元件的大小,在調用ReSizeForm前先調用ReSizeInit函數PublicSubResizeForm(FormNameAsForm)DimPos(4)AsDoubleDimiAsLong,TempPosAsLong,StartPosAsLongDimObjAsControlDimScaleXAsDouble,ScaleYAsDoubleScaleX=FormName.ScaleWidth/FormOldWidth保存窗體寬度縮放比例ScaleY=FormName.ScaleHeight/FormOldHeight保存窗體高度縮放比例OnErrorResumeNextForEachObjInFormNameStartPos=1Fori=0To4讀取控件的原始位置與大小TempPos=InStr(StartPos,Obj.Tag,"",vbTextCompare)IfTempPos>0ThenPos(i)=Mid(Obj.Tag,StartPos,TempPos-StartPos)StartPos=TempPos+1ElsePos(i)=0EndIf根據控件的原始位置及窗體改變大小的比例對控件重新定位與改變大小Obj.MovePos(0)*ScaleX,Pos(1)*ScaleY,Pos(2)*ScaleX,Pos(3)*ScaleYNextiNextObjOnErrorGoTo0EndSubPrivateSubForm_Load()CallResizeInit(Me)在程序裝入時必須加入EndSubPrivateSubForm_Resize()CallResizeForm(Me)確保窗體改變時控件隨之改變EndSub
本例中給出了二個函數:ResizeInit和ResizeForm, 在調用ResizeForm之前必須先調用ResizeInit。你可以將本程序拷到窗體代碼段里,然后在 窗體里加入任意控件即可進行測試。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗