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 SubPrivate Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End SubPrivate Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub
'新建一个工程,放一个commandButton和一个TextBox,再贴上下面代码,看一看就明白了。 Private Sub Command1_Click() End End SubPrivate Sub Form_Load() Command1.Caption = "Exit" Command1.Height = 300: Command1.Width = 600 Command1.Top = 120 Text1.Top = 600 Text1.Left = 0 End SubPrivate Sub Form_Resize() On Error Resume Next Command1.Left = Me.ScaleWidth - 1000 Text1.Width = Me.ScaleWidth Text1.Height = Me.ScaleHeight - Text1.Top End Sub
自动改变控件大小当 窗 体 大 小 改 变 时, 如 何 动 态 的 改 变 控 件 的 大 小 是 许 多VB 程 序 员 头 痛 的 事。 有 的 人 设 置 窗 体Resizable 但 却 不 改 变 控 件 的 大 小; 有 的 人 则 根 据 控 件 的 绝 对 位 置 与 窗 口 大 小 相 加 减 的 办 法 来 重 新 定 位 控 件 与 改 变 大 小, 这 种 办 法 比 较 繁 琐, 且 不 可 重 用; 当 然 也 有 人 则 限 定 窗 口 干 脆 不 让 改 变。 有 没 有 一 种 简 便 易 行 的 办 法 ? 答 案 是 肯 定 的, 下 面 给 出 一 个 一 劳 永 逸 的 办 法, 源 程 序 如 下: 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 Private Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End Sub Private Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub 本 例 中 给 出 了 二 个 函 数:ResizeInit 和ResizeForm, 在 调 用 ResizeForm 之 前 必 须 先 调 用ResizeInit。 你 可 以 将 本 程 序 拷 到 窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测 试。
在调用ResizeForm前先 保存窗体的宽高度求窗体宽高度缩放比例
按比例改变表单内各元件的大小
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 SubPrivate Sub Form_Load()
Call ResizeInit(Me) '在程序装入时必须加入
End SubPrivate Sub Form_Resize()
Call ResizeForm(Me) '确保窗体改变时控件随之改变
End Sub
Private Sub Command1_Click()
End
End SubPrivate Sub Form_Load()
Command1.Caption = "Exit"
Command1.Height = 300: Command1.Width = 600
Command1.Top = 120
Text1.Top = 600
Text1.Left = 0
End SubPrivate Sub Form_Resize()
On Error Resume Next
Command1.Left = Me.ScaleWidth - 1000
Text1.Width = Me.ScaleWidth
Text1.Height = Me.ScaleHeight - Text1.Top
End Sub
程 序 员 头 痛 的 事。 有 的 人 设 置 窗 体Resizable 但 却 不 改 变 控
件 的 大 小; 有 的 人 则 根 据 控 件 的 绝 对 位 置 与 窗 口 大 小 相
加 减 的 办 法 来 重 新 定 位 控 件 与 改 变 大 小, 这 种 办 法 比 较
繁 琐, 且 不 可 重 用; 当 然 也 有 人 则 限 定 窗 口 干 脆 不 让 改 变。
有 没 有 一 种 简 便 易 行 的 办 法 ? 答 案 是 肯 定 的, 下 面 给 出
一 个 一 劳 永 逸 的 办 法, 源 程 序 如 下: 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 Private Sub Form_Load() Call ResizeInit(Me) '在程序装入时必须加入 End Sub Private Sub Form_Resize() Call ResizeForm(Me) '确保窗体改变时控件随之改变 End Sub 本 例 中 给 出 了 二 个 函 数:ResizeInit 和ResizeForm, 在 调 用
ResizeForm 之 前 必 须 先 调 用ResizeInit。 你 可 以 将 本 程 序 拷 到
窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测
试。
一样 是对的
按比例改变表单内各元件的大小
最好的方法在vb编辑环境下最大化窗体,手工摆放好各个控件,再记录每个控件的位置,然后在Resize事件中再设置各个控件的位置
^O^
写缩放,最好先把一些相关的控件放到Frmae里.窗口是缩放Frmae,而各个Frame里的控件也各自对自己所在的框架里的变化作相应的调整!
如果控件很多,一次调整整个Form里的东东就够你忙了!