Si au lancement de votre application, une fenêtre ne s'affiche pas instantanément, cela donnera une impression de lourdeur et de lenteur d'exécution à l'utilisateur. Le chargement de la fenêtre principale d'un programme pouvant être relativement long, il est courant d'afficher un écran d'accueil, qui apparaît immédiatement, et qui reste visible pendant le chargement du reste du programme.
Nous allons créer une procédure Main qui sera chargée :
- d'afficher l'écran d'accueil
- d'afficher la fenêtre principale
- de fermer l'écran d'accueil après un délai à spécifier
Le délai sert à laisser l'écran d'accueil visible au moins quelques secondes, même dans le cas où l'ouverture de la fenêtre principale serait quasi instantanée.
Pour créer l'écran d'accueil, ajoutez une form au projet et nommez-la frmSplash. Enlevez sa barre de titre en donnant la valeur False à la propriété ControlBox et en ne mettant aucun texte dans la propriété Caption. Vous pouvez aussi, si vous le souhaitez, enlever la bordure de la fenêtre en donnant la valeur 0 à la propriété BorderStyle. Donnez la valeur 2 à la propriété StartUpPosition. Posez ensuite un timer et nommez-le "tmr". Puis collez ce code source dans le module de la feuille :
vb
Dim sec As Long
Dim delai As Long
Private Sub Form_Load()
tmr.Enabled = False
tmr.Interval = 1000
sec = 0
AuSommet Me.hwnd
End Sub
Public Sub CloseAfter(ByVal attente As Long)
tmr.Enabled = True
delai = attente
End Sub
Private Sub tmr_Timer()
sec = sec + 1
Me.Print sec
If sec >= delai Then Unload Me
End Sub]
Dans la procédure Form_Load, l'appel à la fonction AuSommet permet de spécifier que cette form doit toujours se trouver au premier plan. Ainsi elle ne sera pas cachée par la fenêtre principale. Ajoutez une autre form au projet et nommez-la frmMain. Placez enfin ce code dans un module standard :
vb
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOPMOST = -1
Private Declare Function SetWindowPos Lib "USER32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Public Function AuSommet(hwnd As Long) As Long
AuSommet = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
End Function
Sub Main()
frmSplash.Show
DoEvents
frmMain.Show
'fermeture au bout de 2 secondes
frmSplash.CloseAfter 2
End Sub