下面这组代可以实现你的要求,窗体内拖一个frame: Private Sub Form_Load() Form1.Height = Screen.Height / 6 Form1.Width = Screen.Width / 6 End Sub Private Sub Form_Resize() Frame1.Move 0, 0, ScaleWidth, ScaleHeight End Sub
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 DoubleScaleX = 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 SubPrivate Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End SubPrivate Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub
Private Sub Form_Load() Dim obj As Object For Each obj In Me.Controls obj.Tag = obj.Left & "," & obj.Top & "," & obj.Width & "," & obj.Height Next obj Me.Tag = Me.Width & "," & Me.Height End SubPrivate Sub Form_Resize() Dim ScaleX As Double Dim ScaleY As Double Dim splitStr() As String Dim obj As Object
比如说mshflexgrid控件
mshflexgrid.width=screen.width*.90
On Error Resume Next
'当窗体调整时会调整网格
DataGrid1.Width = Me.ScaleWidth - 200
DataGrid1.Height = Me.ScaleHeight - 1100
Command1.Left = Me.ScaleWidth - Command1.Width - 100
Command1.Top = Me.ScaleHeight - 400
End Sub
看看这个 是否有帮助
Private Sub Form_Load()
Form1.Height = Screen.Height / 6
Form1.Width = Screen.Width / 6
End Sub
Private Sub Form_Resize()
Frame1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
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 DoubleScaleX = 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 SubPrivate Sub Form_Load()
Call ResizeInit(Me) '在程序装入时必须加入
End SubPrivate Sub Form_Resize()
Call ResizeForm(Me)
'确保窗体改变时控件随之改变
End Sub
Dim obj As Object
For Each obj In Me.Controls
obj.Tag = obj.Left & "," & obj.Top & "," & obj.Width & "," & obj.Height
Next obj
Me.Tag = Me.Width & "," & Me.Height
End SubPrivate Sub Form_Resize()
Dim ScaleX As Double
Dim ScaleY As Double
Dim splitStr() As String
Dim obj As Object
splitStr = Split(Me.Tag, ",")
ScaleX = Me.Width / splitStr(0)
ScaleY = Me.Height / splitStr(1)
For Each obj In Me.Controls
splitStr = Split(obj.Tag, ",")
obj.Left = splitStr(0) * ScaleX
obj.Top = splitStr(1) * ScaleY
obj.Width = splitStr(2) * ScaleX
obj.Height = splitStr(3) * ScaleY
Next obj
End Sub
good!! good !!
以前找这个方法没有找到
谢谢le
up!!!