Home
Home

--- Soumis par Michael Bedward---

Afficher une boîte de dialogue pour un laps de temps déterminé.

     La boîte de dialogue  MsgBox ne permet pas de se fermer automatiquement après un certain temps. On peut cependant fermer cette boîte de dialogue en utilisant un Timer, par exemple.

    Une autre alternative et de construire un formulaire en mode d'exécution, utilisant CreateForm et CreateControl.  Cette fonction utilise ces méthodes pour créer ce formulaire et le fermer automatiquement après un certain temps.

'************* Code Start **************
' Affiche un simple popup dialogue pour un temps 
' prédéterminé en secondes.
'
' Ce code fut écrit par Michael Bedward
' mbedward@ozemail.com.au
' March 31, 1999.
'
' Vous êtes libres de distribuer ce code comme vous le
' désirez, mais il serait agréable de créditer l'auteur initial
' en laissant cette note.  Toute suggestion d'amélioration est
' bienvenue.
'
' Modifications:
'   April 12, 1999
'   Modifications selon suggestion de Mark West (mrwest@engin.umich.edu):
'   pour dimensionner le formulaire selon la longueur du texte;
'   arguments optionels pour la police de caractères ( font name and size);
'   code pour effacer l'object formulaire.
'
'   April 16,1999
'   Ajout de traitement d'erreur selon suggestion de Dev Ashish (dash10@hotmail.com).
'
Sub mxbPopupMessage(ByVal message As String, _
                    Optional ByVal title As Variant, _
                    Optional ByVal duration As Single, _
                    Optional strFontName As String, _
                    Optional intFontSize As Integer)
    Dim f As Form
    Dim lbl As Label
    Dim dblWidth As Double
    Dim myName As String
    Dim savedForm As Boolean
    
    ' utilisé par traitement d'erreur
    '
    savedForm = False
    
    ' empêche le rafraîchissement de l'écran momentannéement
    ' pour éviter de voir le déroulement de la création du formulaire
    '
    On Error GoTo ErrorHandler
    Application.Echo False
    
    ' formulaire tout vide
    '
    Set f = CreateForm
    myName = f.Name
    f.RecordSelectors = False
    f.NavigationButtons = False
    f.DividingLines = False
    f.ScrollBars = 0  ' none
    f.PopUp = True
    f.BorderStyle = acDialog
    f.Modal = True
    f.ControlBox = False
    f.AutoResize = True
    f.AutoCenter = True
    
    ' le titre
    '
    If IsMissing(title) Then
        f.Caption = "Info"
    Else
        f.Caption = title
    End If
    
    ' étiquette pour le message
    '
    Set lbl = CreateControl(f.Name, acLabel)
    lbl.Caption = message
    lbl.BackColor = 0 ' transparent
    lbl.ForeColor = 0
    lbl.Left = 100
    lbl.Top = 100
    If strFontName <> "" Then lbl.FontName = strFontName
    If intFontSize > 0 Then lbl.FontSize = intFontSize
    lbl.SizeToFit
    dblWidth = lbl.Width + 200
    f.Width = dblWidth - 200
    f.Section(acDetail).Height = lbl.Height + 200
    
    ' affichage du formulaire (tout d'abord, le sauvegarder et le fermer
    ' de sorte qu'il se centre à l'ouverture)
    '
    DoCmd.Close acForm, myName, acSaveYes
    savedForm = True
    DoCmd.OpenForm myName
    DoCmd.MoveSize , , dblWidth
    DoCmd.RepaintObject acForm, myName

    ' rétablir les rafraîchissments d'écran
    '
    Application.Echo True

    ' afficher le formulaire pour un temps limité
    '
    If duration <= 0 Then duration = 2
    Dim startTime As Single
    startTime = Timer
    While Timer < startTime + duration
    Wend
    
    ' fermer et effacer ce formulaire
    '
    DoCmd.Close acForm, myName, acSaveNo
    DoCmd.DeleteObject acForm, myName
    Exit Sub
    
ErrorHandler:
    Application.Echo True
    Dim i As Integer
    For Each f In Forms
      If f.Name = myName Then
        DoCmd.Close acForm, myName, acSaveNo
        Exit For
      End If
    Next f
    If savedForm Then
      DoCmd.DeleteObject acForm, myName
    End If
               
End Sub
'************* Code End **************