Ms access 使用Access VBA设置子窗体动画
我试图通过使用一些动画打开一个子窗体,向Access数据库添加一点flare。我希望它从主窗体的左上角打开,并通过小增量扩展其大小,直到达到主窗体的宽度和高度。当我单步执行时,我的代码似乎按照预期工作,但实际上,它会在循环的整个过程中暂停,并且只显示完整大小的表单,而不显示任何动画。似乎它在批处理中运行循环,然后对子窗体对象执行调整。有没有关于如何实现这一目标的建议Ms access 使用Access VBA设置子窗体动画,ms-access,vba,Ms Access,Vba,我试图通过使用一些动画打开一个子窗体,向Access数据库添加一点flare。我希望它从主窗体的左上角打开,并通过小增量扩展其大小,直到达到主窗体的宽度和高度。当我单步执行时,我的代码似乎按照预期工作,但实际上,它会在循环的整个过程中暂停,并且只显示完整大小的表单,而不显示任何动画。似乎它在批处理中运行循环,然后对子窗体对象执行调整。有没有关于如何实现这一目标的建议 Option Compare Database Option Explicit Declare Sub Sleep Lib "k
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
选项比较数据库
选项显式
声明子睡眠库“kernel32”_
(ByVal的长度为毫秒)
公共子动画表单(子表单为字符串,maxWidth为长,maxHeight为长)
将sbf设置为子窗体
将父窗体设置为字符串
Dim递增X为双精度
Dim递增为Double
parentForm=“frmHome”
设置sbf=Forms(parentForm).Controls(“sbfPopUp”)
sbf.SourceObject=子窗体
sbf.宽度=0
sbf.高度=0
sbf.Visible=True
增量x=最大宽度/1000
增量Y=最大高度/1000
当sbf.Width
DoEvents将为系统提供重新绘制所需的暂停时间
我将代码从“Sleep 10”改为“started=Timer:Do:DoEvents:Loop-Until-Timer-started>=0.001”,而不是Sleep(并进行32位内核调用)
顶部变暗“变暗开始为单个”,导致:
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
Dim started As Single
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 $lt; maxHeight
sbf.Width = sbf.Width + incrementX
sbf.Height = sbf.Height + incrementY
started = Timer: Do: DoEvents: Loop Until Timer - started >= 0.001
Loop
End Sub
公共子动画表单(子表单为字符串,maxWidth为长,maxHeight为长)
将sbf设置为子窗体
将父窗体设置为字符串
Dim递增X为双精度
Dim递增为Double
迪姆一开始是单身
parentForm=“frmHome”
设置sbf=Forms(parentForm).Controls(“sbfPopUp”)
sbf.SourceObject=子窗体
sbf.宽度=0
sbf.高度=0
sbf.Visible=True
增量x=最大宽度/1000
增量Y=最大高度/1000
sbf.Width啊哈!我在循环中添加了sbf.requery,现在它运行得很好。总是错过这件小事。。。