【问题标题】:Animating a SubForm Using Access VBA使用 Access VBA 为子窗体设置动画
【发布时间】:2017-01-13 04:29:00
【问题描述】:

我正在尝试通过使用一些动画打开子表单来为我的 Access 数据库添加一些亮点。我希望它从主窗体的左上角打开并以小增量扩展其大小,直到它达到主窗体的宽度和高度。当我单步执行它时,我的代码似乎按预期工作,但是实际上它在循环的整个持续时间内暂停,并且似乎仅以全尺寸显示表单而没有任何动画外观。似乎它批量运行循环,然后对子表单对象执行调整。关于如何实现这一点的任何建议?

Option Compare Database
Option Explicit

Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)

Public Sub AnimateOpenForm(SubForm As String, maxWidth As Long, maxHeight As Long)
    Dim sbf As SubForm
    Dim parentForm As String
    Dim incrementX As Double
    Dim incrementY As Double

    parentForm = "frmHome"

    Set sbf = Forms(parentForm).Controls("sbfPopUp")
    sbf.SourceObject = SubForm

    sbf.Width = 0
    sbf.Height = 0

    sbf.Visible = True

    incrementX = maxWidth / 1000
    incrementY = maxHeight / 1000

    Do While sbf.Width < maxWidth And sbf.Height < maxHeight

        sbf.Width = sbf.Width + incrementX
        sbf.Height = sbf.Height + incrementY

        Sleep 10

    Loop

End Sub

【问题讨论】:

  • 啊哈!我在循环中添加了 sbf.requery ,现在它工作得很好。总是错过这件小事……

标签: ms-access vba


【解决方案1】:

DoEvents 将为系统提供重绘所需的暂停。

而不是睡眠(并进行 32 位内核调用),我将您的代码从“睡眠 10”更改为“开始 = 计时器:执行:DoEvents:循环直到计时器 - 开始 >= 0.001” 以及顶部变暗的“暗淡以单身开始”导致:

Public Sub AnimateOpenForm(SubForm As String, maxWidth As Long, maxHeight As Long) 将 sbf 调暗为子表单 将 parentForm 调暗为字符串 将增量 X 变暗为 Double Dim incrementY As Double 暗淡开始单身 parentForm = "frmHome" 设置 sbf = Forms(parentForm).Controls("sbfPopUp") sbf.SourceObject = 子窗体 sbf.Width = 0 sbf.高度 = 0 sbf.Visible = 真 增量X = maxWidth / 1000 增量Y = maxHeight / 1000 Do While sbf.Width = 0.001 环形 结束子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多