控件自适应屏幕分辩率或调整窗体大小变化 -张志
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-窗体/数据页


控件自适应屏幕分辩率或调整窗体大小变化

发表时间:2005/1/13 评论(4) 浏览(13605)  评论 | 加入收藏 | 复制
   
摘 要:控件自适应屏幕分辩率或调整窗体大小变化
正 文:

示例代码:

Private Sub Form_Load()
InitWidth = Me.InsideWidth ' ScaleWidth
InitHeight = Me.InsideHeight ' ScaleHeight
Dim Ctl As Control
' 记录每个 Control 的原始位置、大小、字型大小, 放在 Tag 属性中
On Error Resume Next '确保left, top, width, height, Tag属性没有全有的Control
For Each Ctl In Me   '也能正常执行
    Ctl.Tag = Ctl.Left & " " & Ctl.Top & " " & Ctl.Width & " " & Ctl.Height & " "
    Ctl.Tag = Ctl.Tag & Ctl.FontSize & " "
Next Ctl
On Error GoTo 0
End Sub

Private Sub Form_Resize()
Dim D(4) As Double
Dim I As Long
Dim TempPos As Long
Dim StartPos As Long
Dim Ctl As Control
Dim TempVisible As Boolean
Dim ScaleX As Double
Dim ScaleY As Double

ScaleX = Me.InsideWidth / InitWidth                 
ScaleY = Me.InsideHeight / InitHeight
On Error Resume Next
For Each Ctl In Me
    TempVisible = Ctl.Visible
    Ctl.Visible = False
    StartPos = 1
    ' 读取 Control 的原始位置、大小、字型大小
    For I = 0 To 4
        TempPos = InStr(StartPos, Ctl.Tag, " ", vbTextCompare)
        If TempPos > 0 Then
            D(I) = Mid(Ctl.Tag, StartPos, TempPos - StartPos)
            StartPos = TempPos + 1
        Else
            D(I) = 0
        End If
        ' 根据比例设定 Control 的位置、大小、字型大小
        Ctl.Move D(0) * ScaleX, D(1) * ScaleY, D(2) * ScaleX, D(3) * ScaleY
        'Ctl.Width = D(2) * ScaleX
        'Ctl.Height = D(3) * ScaleY
        If ScaleX < ScaleY Then
            Ctl.FontSize = D(4) * ScaleX
        Else
            Ctl.FontSize = D(4) * ScaleY
        End If
    Next I
    Ctl.Visible = TempVisible
Next Ctl
On Error GoTo 0
End Sub


Access软件网交流QQ群(群号:198465573)
 
 相关文章
[分享]适应不同分辩率让窗体内控件居中  【竹笛  2004/6/8】
用VBA获得屏幕分辩率  【bamboo  2007/12/6】
窗体自适应宽屏显示器分辩率  【文双全  2012/12/14】
 
 访客评论
2018/8/29马世豪
最大化以后再缩小会出问题。。。

2015/1/9林岚
Dim InitWidth As Long
Dim InitHeight As Long


放到窗体的公共变量中


2014/6/11juanchan
ScaleX = Me.InsideWidth / InitWidth                 
ScaleY = Me.InsideHeight / InitHeight
除数怎么会是零呢? 求解

2012/1/20rainy
ScaleX = Me.InsideWidth / InitWidth                 
ScaleY = Me.InsideHeight / InitHeight
除数怎么会是零呢?

总记录:4篇  页次:1/1 9 1 :
 
 发表评论
评论内容 (必填)

常见问答
技术分类
相关资源
文章搜索
关于作者

张志

文章分类

文章存档

友情链接