Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ANIMATED WINDOWS


Information sur la source

Catégorie :API Niveau : Débutant Date de création : 27/01/2005 Vu / téléchargé: 4 026 / 767

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

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

  • 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
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

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de fg85 le 27/01/2005 17:38:01

Bon script peu aidé pas mal de débutant (comme moi ;-)
---------------------------
http://fg.logiciel.free.fr

signaler à un administrateur
Commentaire de ScSami le 28/01/2005 00:53:21

Merci. et j'espère que ça te servira...

Perso, je trouve l'effet de fondu par opacité assez impressionnant (surtout quand on veux se la péter ;-).

signaler à un administrateur
Commentaire de sam013 le 29/01/2005 21:05:44

:D

Merci, moi sa me sert aussi, et hop, vue ma debutentissiter ! lol c'est de mon niveau :o

Merci l'amis !

10 sUr 10

signaler à un administrateur
Commentaire de ScSami le 30/01/2005 00:20:14

Alors je suis content :-)

signaler à un administrateur
Commentaire de sam013 le 30/01/2005 12:30:39

c le toooop :d

signaler à un administrateur
Commentaire de didyman le 30/01/2005 15:37:40

Tres bon tuto pour moi (étant débutant dans les API)

Mais juste une chose... a koi il set le FIX devant le RND?? Es-ce un genre de Int(Rnd * 9) + 1 ???

signaler à un administrateur
Commentaire de ScSami le 30/01/2005 21:07:43

Oops, Ignorez le commentaire précédent... C'était pour une autre source... Désolé.

Pour le FIX, oui, c'est un peu comme INT à une petite différence...

Mais le plus important c'est RND. En effet, si vous RND renvoie une valeur entre 0 et <1 soit, p.ex. "0,99999...".

Du coup, si vous mettez :

varAleatoire = RND * 5
"varAleatoire" sera compris entre 0 et 4,999...

FIX tronque la partie décimale. Donc :

varAleatoire = FIX(RND * 5)
"varAleatoire" pourra être 0, 1, 2, 3 ou 4.

Donc, pour obtenir une valeur entre 1 et X il faut :
varAleatoire = FIX(RND * 5) + 1
Là on aura une valeur comprise entre 1 inclus et 5 inclus où "5" sera la valeur Maxi.


Dim varBase As Boolean
Dim varMax As Byte
Dim varAleatoire As Byte

varBase = False  'Minimum à 0
'varBase = True   'Minimum à 1

varMax = 9

If varBase=False Then

varAleatoire = Fix(Rnd * (varMax + 1) )

Else  'True

varAleatoire = Fix(Rnd * varMax) + 1

End If


Et encore merci à tous pour cette note non mérité (c'est pas moi qui est fait l'API !!!)...

signaler à un administrateur
Commentaire de didyman le 31/01/2005 03:26:39

Merci mais je voulais savoir quelle est la difference entre INT et FIX??? le reste je connais.. merci quand meme

signaler à un administrateur
Commentaire de ssauvage le 31/01/2005 11:01:36

Facile, joli et bien commenté. Bravo.
J'aurai juste ajouté dans l'exemple une combo permettant de choisit l'effet qui va être appliqué à la fermeture...

signaler à un administrateur
Commentaire de ScSami le 01/02/2005 00:04:13

Didyman :
Voici ce que dit la MSDN au sujet de FIX et INT :
"
Différence entre les fonctions Int et Fix : si number est négatif, Int renvoie le premier entier négatif inférieur ou égal à number, alors que Fix renvoie le premier entier négatif supérieur ou égal à number. Par exemple, Int convertit -8,4 en -9 et Fix convertit -8,4 en -8.

Fix(number) équivaut à :
Sgn(number) * Int(Abs(number))
"

ssauvage :  je sens bien que tu es un fan des combos ;-). Non, je crois que ça aurait été superflu...

signaler à un administrateur
Commentaire de didyman le 01/02/2005 00:37:11

Merci beacoup.....  La tu répond a ma question :P!!!!

Merci!  et très bien détailler en passant!!!

Et c'est bon a savoir pour le FIX et le INT

signaler à un administrateur
Commentaire de didyman le 01/02/2005 15:12:39

Et le doevents????
Je sais.. je pose beaucoup de question!

signaler à un administrateur
Commentaire de ScSami le 02/02/2005 01:23:43

"DoEvents" sert à redonner temporairement (un temps quoi) la "main" à Windows. Comme ça, si Windows a un truc un faire, il le fait et notre programme ne l'accapare pas pour lui tout seul.
Dans les faits, ça sert surtout à laisser le temps à Windows de redessiner ou d'effacer la fenêtre du prog sans quoi il y aurait des bugs d'affichage.

Beaucoup de "bugs" proviennent de ça...

signaler à un administrateur
Commentaire de didyman le 02/02/2005 02:19:01

OK... alors pour mon jeux de tictactoe que je fait...  lorsque un dessin affiche sa fais un genre de ti flash noir dans la fenntre... fac si je met DoEvents a la fin sa ne devrais pas faire sa?

signaler à un administrateur
Commentaire de ScSami le 03/02/2005 00:54:31

Ah ça, je ne sais pas !!!
Faut voir...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.