Animated windows

Description

Animated Window : Parfait exemple de l'utilisation de l'API.

Ce code permet d'obtenir, via API, des effets d'ouverture et de fermeture des fenêtres.
Par exemple, un effet de fondu par transparence (humm).

Et le tout très facilement.

Ce code est facilement réutilisable tel quel.

Il est hyper commenté et pourra apprendre beaucoup aux débutants.

Tout est dans le zip alors, éclatez-vous bien ;-)

Source / Exemple :


Private Declare _
 Function AnimateWindow _
  Lib "user32" ( _
   ByVal hWnd As Long, _
   ByVal dwTime As Long, _
   ByVal dwFlags As Long) _
  As Long

'Etats primaires
Private Const AwDroite = &H1
Private Const AwGauche = &H2
Private Const AwBas = &H4
Private Const AwHaut = &H8
Private Const AwCentre = &H10
Private Const AwHide = &H10000
Private Const AwShow = &H20000
Private Const AwFondu = &H80000
Private Const AwSlide = &H40000
'Etats secondaires
Private Const AwDroiteBas = AwDroite Or AwBas
Private Const AwDroiteHaut = AwDroite Or AwHaut
Private Const AwGaucheBas = AwGauche Or AwBas
Private Const AwGaucheHaut = AwGauche Or AwHaut

Private Sub Form_Load()
 Dim varVitesse As Integer
 Dim varEffet As Long
 
 'Rend aléatoire le timer (qui sert pour l'aléatoire...)
 Randomize Timer
 
 'Choix aléatoire de la vitesse :
 '1 = 0,25 seconde
 '2 = 0,5 seconde
 '3 = 1 seconde
 varVitesse = Fix(Rnd * 3) + 1
 varVitesse = IIf(varVitesse = 1, 250, IIf(varVitesse = 2, 500, 1000))
 
 'Choix aléatoire de l'effet
 varEffet = Fix(Rnd * 10) + 1
 varEffet = Choose(varEffet, AwFondu, _
                             AwDroite, _
                             AwGauche, _
                             AwBas, _
                             AwHaut, _
                             AwDroiteBas, _
                             AwDroiteHaut, _
                             AwGaucheBas, _
                             AwGaucheHaut, _
                             AwCentre)
 'Choix aléatoire du mode Normal ou Slide sauf
 ' pour l'effet fondu qui ne peut être que Normal.
 If varEffet <> AwFondu And Fix(Rnd * 2) = 1 Then varEffet = varEffet Or AwSlide
 
 'NOTE: Me équivaut le nom de la fenêtre.
 ' Du coup, même si le nom de la fenêtre change,
 ' le code reste le même.
 'NOTE: AwShow c'est pour l'ouverture de la fenêtre.
 AnimateWindow Me.hWnd, varVitesse, AwShow Or varEffet
 
 'Note: Il faut raffraîchir tous les conteneurs.
 'Pour se faire, on peut soit les lister manuellement p.ex. :
 'Me.Refresh
 'Picture1.Refresh
 'Frame1.Refresh
 '...
 'Mais cette technique peut s'avérer fastidieuse lorsque
 ' vous modifier votre interface (p.ex. l'ajout d'un
 ' nouveau contrôle ou la modification du nom d'un contrôle).
 'Afin de ne pas avoir à retoucher ce code, la meilleur
 ' technique réside dans un scannage de tous les contrôles
 ' et de refraîchir tous ceux qui sont des conteneurs.
 'Pour se faire, il faut parcourir l'objet "Controls" qui
 ' est une collection contenant tous les contrôles de la fenêtre.
 Me.Refresh  'Car Controls ne contient pas la fenêtre
 'Une erreur va se produire si un contrôle ne possède pas
 ' la méthode Refresh. C'est à dire, si ce n'est pas un
 ' contrôle conteneur. Pour parer ce cas, on met en place
 ' un gestionnaire d'erreur qui, lors d'une erreur, continu
 ' le déroulement du programme sur l'instruction qui suit l'erreur.
 On Error Resume Next
 'Parcours la collection "Controls" appartenant à la fenêtre.
 For Each objControleLambda In Me.Controls
  objControleLambda.Refresh
 Next objControleLambda  'Note: Ce nom est arbitraire et peut
 ' être changé...
 'Ceci désactive tout gestionnaire d'erreur
 ' précédemment mis en place. C.a.d., le nôtre.
 On Error GoTo 0
 DoEvents
 'Copiez simplement ce code sans le modifier.
End Sub

Private Sub Form_Unload(Cancel As Integer)
 Dim varVitesse As Integer
 Dim varEffet As Long
 
 'NOTE: La fermeture est légèrement différente de l'ouverture :
 ' - Il est inutile de randomizer le timer (pour bcp de raisons);
 ' - Pour ne pas emerder l'utilisateur, on se doit de fermer
 '    le programme le plus rapidement possible. Donc, il est
 '    inutile de rendre aléatoire la vitesse de l'effet.
 '    Donc, on doit se contenter de la vitesse minimale assurant
 '    à l'effet un affichage correcte, c.a.d., 500 millisecondes.
 ' - AwSlide est nécessaire. Il n'y a donc pas de choix
 '    à faire entre le mode Normal et le mode Slide;
 ' - AwCentre n'a aucun effet;
 'Choix aléatoire de l'effet :
 varEffet = Fix(Rnd * 9) + 1
 varEffet = Choose(varEffet, AwFondu, _
                             AwDroite, _
                             AwGauche, _
                             AwBas, _
                             AwHaut, _
                             AwDroiteBas, _
                             AwDroiteHaut, _
                             AwGaucheBas, _
                             AwGaucheHaut)
 
 'NOTE: AwHide c'est pour la fermeture de la fenêtre.
 AnimateWindow Me.hWnd, 500, AwHide Or AwSlide Or varEffet
End Sub

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.