2017-01-12 1 views
0

일부 애니메이션을 사용하여 하위 폼을 열어 Access 데이터베이스에 약간의 플레어를 추가하려고합니다. 기본 폼의 왼쪽 상단에서 열어서 기본 폼의 너비와 높이에 도달 할 때까지 크기를 조금씩 늘려야합니다. 내가 가지고있는 코드는 의도적으로 작동하는 것처럼 보이지만 실제로는 루프의 전체 지속 시간 동안 일시 중지되고 애니메이션의 모양없이 전체 크기로만 폼을 표시하는 것처럼 보입니다. 그것은 일괄 처리에서 루프를 실행 한 것처럼 보이고 하위 폼 개체에 대한 조정을 실행합니다. 이것을 달성하는 방법에 대한 권장 사항은 무엇입니까?Access VBA를 사용하여 SubForm에 애니메이션 적용

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 
+0

Ah ha! 루프 안에 sbf.requery를 추가했는데 이제는 아름답게 작동합니다. 항상이 한 가지 사소한 일을 놓치고 ... –

답변

0

DoEvents는 시스템을 다시 그리기 위해 필요한 일시 중지를 제공합니다. 대신 수면 (32 비트 커널 호출을) 나는 "수면 10"에서 당신의 코드를 변경의

는에 "= 타이머를 시작 :해야 할 것 : DoEvents : 루프 타이머까지 -> = 0.001 시작" 을 최대 최고 어둡게 ' 에드 "희미한 시작 싱글"결과 :

 


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 
관련 문제