Dim Cx As Long, Cy As LongPrivate Sub Form_Load() Cx = Me.Left + Command1.Left Cy = Me.Top + Command1.Top End SubPrivate Sub Form_Resize() Command1.Move Cx, Cy End Sub ------ 比如这么一个!
Dim Cx As Long, Cy As LongPrivate Sub Form_Load() Load Me Me.Show Cx = Me.Left + Command1.Left Cy = Me.Top + Command1.Top End SubPrivate Sub Form_Resize() If Me.WindowState = 2 Then Command1.Move Cx, Cy ElseIf Me.WindowState = 0 Then Command1.Move Cx - Me.Left, Cy - Me.Top End If End Sub 呵呵,好像有点小问题!
Dim x As Double Dim y As Double Dim fw As Double '窗体宽 Dim fh As Double '窗体高 Dim x1 As Double '窗体宽度变动比例 Dim y1 As Double '窗体高度变动比例 Private Sub Command1_Click() Me.WindowState = 2 End SubPrivate Sub Form_Load() Me.Show fw = Me.Width fh = Me.Height x = Command1.Left y = Command1.Top End SubPrivate Sub Form_Resize() If Me.WindowState = 2 Then x1 = Me.Width / fw y1 = Me.Height / fh Command1.Move x1 * x, y1 * y Else Command1.Move x, y End If 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 End Sub'按比例改变表单内各元件的大小, Public Sub ResizeForm(FormName As Form) Dim Pos(3) 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 3 '读取控件的原始位置与大小 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 End Sub然后,在需要的窗体上调用:Private mycls As New SetFormCtrlSizePrivate Sub Form_Load() mycls.ResizeInit Me '在程序装入时必须加入 End SubPrivate Sub Form_Resize() mycls.ResizeForm Me '确保窗体改变时控件随之改变 End Sub
Cx = Me.Left + Command1.Left
Cy = Me.Top + Command1.Top
End SubPrivate Sub Form_Resize()
Command1.Move Cx, Cy
End Sub
------
比如这么一个!
Load Me
Me.Show
Cx = Me.Left + Command1.Left
Cy = Me.Top + Command1.Top
End SubPrivate Sub Form_Resize()
If Me.WindowState = 2 Then
Command1.Move Cx, Cy
ElseIf Me.WindowState = 0 Then
Command1.Move Cx - Me.Left, Cy - Me.Top
End If
End Sub
呵呵,好像有点小问题!
Dim y As Double
Dim fw As Double '窗体宽
Dim fh As Double '窗体高
Dim x1 As Double '窗体宽度变动比例
Dim y1 As Double '窗体高度变动比例
Private Sub Command1_Click()
Me.WindowState = 2
End SubPrivate Sub Form_Load()
Me.Show
fw = Me.Width
fh = Me.Height
x = Command1.Left
y = Command1.Top
End SubPrivate Sub Form_Resize()
If Me.WindowState = 2 Then
x1 = Me.Width / fw
y1 = Me.Height / fh
Command1.Move x1 * x, y1 * y
Else
Command1.Move x, y
End If
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
End Sub'按比例改变表单内各元件的大小,
Public Sub ResizeForm(FormName As Form)
Dim Pos(3) 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 3
'读取控件的原始位置与大小
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
End Sub然后,在需要的窗体上调用:Private mycls As New SetFormCtrlSizePrivate Sub Form_Load()
mycls.ResizeInit Me '在程序装入时必须加入
End SubPrivate Sub Form_Resize()
mycls.ResizeForm Me '确保窗体改变时控件随之改变
End Sub