vb窗體中控制元件自動隨窗體變化大小(原始碼)

漫步晨光L發表於2004-11-30

原始碼下載:http://blog.blogchina.com/upload/2004-12-07/20041207155830520878.rar

在開發中,往往開發人員需要控制控制元件大小適應視窗的大小,使得軟體在不同的解析度下也顯得比例協調.
那麼,怎麼才能讓窗體中控制元件自動隨窗體變化大小呢?

我覺得有一種原始方法很有用,不讓窗體可以最大化:比如飛天餐飲軟體.......

當然這種方法是繞道而行.開發出來的軟體肯定好看不了.
好了,讓我們來引出下面這個很有用,比較專業的Model吧.
--------------------------------------------------------------------------------
Option Explicit
Private FormOldWidth As Long
'儲存窗體的原始寬度
Private FormOldHeight As Long
'儲存窗體的原始高度

'在呼叫ResizeForm前先呼叫本函式
Public Sub ResizeInit(FormName As Form)
    Dim Obj As Control
    FormOldWidth = FormName.ScaleWidth
    FormOldHeight = FormName.ScaleHeight
    On Error Resume Next
    For Each Obj In FormName
    Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
    Next Obj
    On Error GoTo 0
End Sub

'按比例改變表單內各元件的大小,在呼叫ReSizeForm前先呼叫ReSizeInit函式
Public Sub ResizeForm(FormName As Form)
    Dim Pos(4) As Double
    Dim i As Long, TempPos As Long, StartPos As Long
    Dim Obj As Control
    Dim ScaleX As Double, ScaleY As Double
   
    ScaleX = FormName.ScaleWidth / FormOldWidth
    '儲存窗體寬度縮放比例
    ScaleY = FormName.ScaleHeight / FormOldHeight
    '儲存窗體高度縮放比例
    On Error Resume Next
    For Each Obj In FormName
    StartPos = 1
    For i = 0 To 4
        '讀取控制元件的原始位置與大小
        TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
        If TempPos > 0 Then
        Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
        StartPos = TempPos + 1
        Else
        Pos(i) = 0
        End If
        '根據控制元件的原始位置及窗體改變大小的比例對控制元件重新定位與改變大小
        Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY
    Next i
    Next Obj
    On Error GoTo 0
End Sub

'開發軟體時候,把這個modal裝入程式中.然後加入如下程式碼:
Private Sub Form_Load()
Call ResizeInit(Me) '在程式裝入時必須加入
End Sub

Private Sub Form_Resize()
Call ResizeForm(Me) '確保窗體改變時控制元件隨之改變
End Sub
--------------------------------------------------------------------------------

ok,這樣你的軟體就可以窗體中控制元件自動隨窗體變化大小!

你的軟體至少從外觀上從此變得不再那麼難看了.而且大解析度下也顯得比例協調了.

相關文章