2010-11-25 4 views
0

Je me demandais simplement, si j'ai des événements graphiques/animation qui se passe sur un écran de démarrage, puis-je utiliser l'événement de la minuterie un peu comment simplement briser la routine pour une petite quantité de temps.MS Access: Contrôle du temporisateur de formulaire ... puis-je l'utiliser pour définir un intervalle de temps dans une routine?

aiment essentiellement:

-some action events 
DoEvents 
'some timer interval 
-more action code 
+0

événements minuterie à utiliser avec prudence, en particulier lors de l'élaboration, les résultats peuvent être imprévisibles. J'utiliserais n'importe quoi sauf un minuteur s'il y a une alternative. –

+0

J'ai ajouté une routine de fondu de formulaire à ma réponse. – Fionnuala

Répondre

1

Utilisez l'API Windows pour inclure une pause entre les sections de code. Voir la procédure à cette page ssleep(): Make code go to Sleep

Const clngMilliSeconds As Long = 10000 '(10 seconds) ' 
'some action events ' 
DoEvents 
'some timer interval ' 
Call sSleep(clngMilliSeconds) 
'more action code ' 
+0

Cela fonctionne très bien pour la question que j'ai posée. Cependant, je ne reçois toujours pas ce dont j'ai besoin. J'essaie d'utiliser de l'animation et de faire un formulaire (comme une éclaboussure) qui disparaît et disparaît. Peut-être que c'est juste plus de problèmes que de sa valeur. Je voulais juste voir si je pouvais le faire. :) Merci! – Justin

+1

J'irais avec "plus de problèmes que cela vaut la peine." –

1

Dans ce cas, je pense qu'il serait préférable de créer votre propre horloge en stockant maintenant() à une variable au début, et la vérification des intervalles que vous voulez avec DateDiff , ou même soustraction droite, étant donné que les dates sont stockées sous forme de nombres.

Form Fade

Creusées d'une bibliothèque très ancienne et non testé récemment. Forme:

Option Compare Database 
Dim gintC 

Private Sub Form_Load() 
Me.TimerInterval = 2 
FadeForm Me, Fadezero, 1, 5 
End Sub 

Private Sub Form_Timer() 
If IsEmpty(gintC) Then 
    FadeForm Me, Fadein, 1, 15 
End If 
gintC = 1 
Me.TimerInterval = 0 
End Sub 

Module:

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ 
(ByVal hWnd As Long, ByVal nIndex As Long) As Long 

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ 
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 

Public Declare Function SetLayeredWindowAttributes Lib "user32" _ 
(ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long 

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

Public Const GWL_EXSTYLE = (-20) 

Public Const WS_EX_LAYERED = &H80000 

Public Const WS_EX_TRANSPARENT = &H20& 

Public Const LWA_ALPHA = &H2& 

'Enum for determining the direction of the fade. 

Public Enum FadeDirection 

    Fadein = -1 

    Fadeout = 0 

    Fadezero = 1 

    SetOpacity = 1 

End Enum 

Public Sub FadeForm(frm As Form, Optional Direction As FadeDirection = FadeDirection.Fadein, _ 
Optional iDelay As Integer = 0, Optional StartOpacity As Long = 5) 

    Dim lOriginalStyle As Long 
    Dim iCtr As Integer 
    'You can only set a form's opacity if it's Popup property = True. 
    If (frm.PopUp = True) Then 
     'Get the form window’s handle, and remember its original style. 
     lOriginalStyle = GetWindowLong(frm.hWnd, GWL_EXSTYLE) 
     SetWindowLong frm.hWnd, GWL_EXSTYLE, lOriginalStyle Or WS_EX_LAYERED 
     'If the form’s original style = 0, it hasn’t been faded since it was opened. 
     'To get fading to work, we have to set its style to something other than zero. 
     If (lOriginalStyle = 0) And (Direction <> FadeDirection.SetOpacity) Then 
      'Recursively call this same procedure to set the value. 
      FadeForm frm, SetOpacity, , StartOpacity 
     End If 
     'Depending on the direction of the fade... 
     Select Case Direction 
      Case FadeDirection.Fadezero 
       iCtr = StartOpacity 
       SetLayeredWindowAttributes frm.hWnd, 0, CByte(iCtr), LWA_ALPHA 
      Case FadeDirection.Fadein 
       'Just in case. 
       If StartOpacity < 1 Then StartOpacity = 1 
       'Fade the form in by varying its opacity 
       'from the value supplied in 'StartOpacity' 
       'to 255 (completely opaque). 
       For iCtr = StartOpacity To 255 Step 1 
       SetLayeredWindowAttributes frm.hWnd, 0, CByte(iCtr), LWA_ALPHA 
       'Process any outstanding events. 
       DoEvents 
       'Wait a while, so the user can see the effect. 
       Sleep iDelay 
       Next 
      Case FadeDirection.Fadeout 
       'Just in case. 
       If StartOpacity < 6 Then StartOpacity = 255 
       'Fade the form out by varying its opacity 
       'from 255 to 1 (almost transparent). 
       For iCtr = StartOpacity To 1 Step -1 
       SetLayeredWindowAttributes frm.hWnd, 0, CByte(iCtr), LWA_ALPHA 
       'Process any outstanding events. 
       DoEvents 
       'Wait a while, so the user can see the effect. 
       Sleep iDelay 
       Next 
      Case Else 'FadeDirection.SetOpacity. 
       'Just in case. 
       Select Case StartOpacity 
       Case Is < 1: StartOpacity = 1 
       Case Is > 255: StartOpacity = 255 
       End Select 
       'Set the form's opacity to a specific value. 
       SetLayeredWindowAttributes frm.hWnd, 0, CByte(StartOpacity), LWA_ALPHA 
       'Process any outstanding events. 
       DoEvents 
       'Wait a while, so the user can see the effect. 
       Sleep iDelay 
     End Select 
    Else 
     'The form’s Popup property MUST = True 
     DoCmd.Beep 
     MsgBox "The form's Popup property must be set to True.", vbOKOnly & vbInformation, "Cannot fade form" 
    End If 

End Sub 
1

Vous pouvez combiner un niveau variable Dim iStep as integer forme qui sera automatiquement statique, et dans votre On Timer proc, quelque chose comme:

Select Case iStep 
    Case 1 
     'do something' 
    Case 2 
     'do something else' 
    Case 3 
     'etc...' 
End Select 
iStep = iStep + 1 
Questions connexes