|
初写VS程序时,可能就会遇到这个问题:窗体大小变化时候,里面的控件却不跟随窗体变化而使程序界面变得难看。我也是摸索了很久才搞定了这个东东。
'2011-2-13日实现窗体控件跟随窗体自动改变大小以保持比例
Option Explicit On
Module autosize
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度
'此函数用于保存窗体初始大小
'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(ByVal FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.Width
FormOldHeight = FormName.Height
On Error Resume Next
For Each Obj In FormName.Controls
Obj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub
'按比例改变表单内各元件的大小, 在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(ByVal 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.Width / FormOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.Height / FormOldHeight
'保存窗体高度缩放比例
On Error Resume Next
For Each Obj In FormName.Controls
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.Location = New Point(Pos(0) * ScaleX, Pos(1) * ScaleY)
Obj.Size = New Size(Pos(2) * ScaleX, Pos(3) * ScaleY)
Next I
Next Obj
On Error GoTo 0
End Sub
'此函数用于根据系统屏幕分辨率自动设置窗体位置及大小
Public Sub Auto_Just_Sys_Resolution(ByVal FormName As Form)
Dim sWidthHeight As Rectangle 'Retrieves the bounds of the display that contains the largest portion of the specified rectangle.
Dim temp_width As Integer, temp_height As Integer '用于根据屏幕分辨率设置窗体初始位置及大小
sWidthHeight = Screen.GetBounds(FormName) '获得系统屏幕当前分辨率,存在一个rectangle的4元素数组中
temp_width = sWidthHeight.Width / 16 '将屏幕4等分
temp_height = sWidthHeight.Height / 16
FormName.Top = sWidthHeight.X + temp_height '设置窗体左上角坐标
FormName.Left = sWidthHeight.Y + temp_width
FormName.Width = sWidthHeight.Width - temp_width * 2 '设置窗体大小
FormName.Height = sWidthHeight.Height - temp_height * 2
End Sub
End Module |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|