开心人生

用今天的努力----实现我所向往的明天

导航

vb窗体中控件自动随窗体变化大小

源代码下载: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()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()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()Sub Form_Load()
Call ResizeInit(Me'
在程序装入时必须加入
End Sub

Private Sub Form_Resize()Sub Form_Resize()
Call ResizeForm(Me'
确保窗体改变时控件随之改变
End Sub

ok,这样你的软件就可以窗体中控件自动随窗体变化大小!

你的软件至少从外观上从此变得不再那么难看了.而且大分辨率下也显得比例协调了.

posted on 2007-03-02 16:37  hai  阅读(1905)  评论(0编辑  收藏  举报