Effets d'animation FireMonkey

De RAD Studio
Aller à : navigation, rechercher

Remonter à Guide des applications FireMonkey


Les animations modifient les valeurs des propriétés dans le temps. Elles peuvent démarrer automatiquement ou manuellement, avec un délai facultatif. Quand une animation s'est déroulée sur la période de temps définie, elle peut s'arrêter, redémarrer ou faire la même chose mais en sens inverse.

Types d'animation

Les sous-classes fournies de TAnimation tombent dans ces trois catégories :

  • Interpolations à partir d'une valeur de début et d'une valeur de fin :
    • TIntAnimation change toute propriété qui est un entier.
    • TFloatAnimation change toute propriété qui est un entier, telle que la position (les axes X, Y et Z doivent être faits séparément), la rotation et l'opacité.
    • TRectAnimation change l'emplacement des quatre bords d'une propriété TBounds.
    • TColorAnimation change toute propriété chaîne ou entière qui contient une couleur, notamment les propriétés de type TAlphaColor (qui est réellement un nombre Cardinal), en modifiant les valeurs rouge, vert, bleu et alpha de la couleur.
    • TGradientAnimation change un dégradé (type TGradient) en modifiant les couleurs de chaque point qui définit le dégradé.
    • TBitmapAnimation transite d'une image bitmap initiale vers une autre image en dessinant l'image finale (type TBitmap) avec une opacité augmentée, provoquant un effet de fondu dans la vue.
  • Interpolation à travers une série de valeurs, pas seulement deux : de la première à la deuxième, de la deuxième à la troisième, at ainsi de suite :
  • Pas à pas à travers une liste sans interpolation :
    • TBitmapListAnimation fonctionne comme un diaporama minuté, avec toutes les images combinées horizontalement dans un bitmap unique. Avec une fréquence d'images rapide (durée courte et/ou beaucoup d'images), il ressemble à une vidéo.

Création d'animations

Les animations sont jointes comme les enfants de l'objet animé, exactement comme tout autre sous-composant. La propriété PropertyName est ensuite définie sur un chemin de propriété à point, comme utilisé avec les fonctions System.TypInfo comme GetPropInfo ; par exemple, "Opacity" et "Position.Y".

Dans l'inspecteur d'objets, les propriétés couramment animées sont indiquées par une icône pellicule. Le choix de la création d'une animation depuis le menu déroulant de la valeur de propriété définira automatiquement le PropertyName. Les objets d'animation ajoutés depuis la palette de composants doivent définir le PropertyName manuellement.

TFmxObject fournit quelques méthodes commodes pour créer des animations numériques et colorées depuis le code, avec le PropertyName et la valeur de fin comme arguments requis. Ces animations démarrent toujours immédiatement depuis la valeur en cours, sont sans bouclage, et se libèrent elles-mêmes quand elles sont terminées. Les animations numériques peuvent aussi démarrer avec un délai ou attendre sur le thread principal jusqu'à leur achèvement.

Démarrage et arrêt

Si l'indicateur Enabled d'une animation est défini sur True dans le Concepteur de fiches, elle démarrera automatiquement après le chargement. Le définir sur True dans le code démarrera aussi l'animation ; le définir sur False arrêtera l'animation. Inversement, appeler Start et Stop définira Enabled sur la valeur correspondante.

Dans TFloatAnimation, StartFromCurrent définira automatiquement StartValue avec la valeur de propriété en cours quand l'animation est démarrée (en appelant Start ou si Enabled est défini sur True). Il n'y a pas de point définissant StartValue si StartFromCurrent vaut True. Cela est vrai pour TIntAnimation également.

Remarque : Ceci est surtout pertinent lors d'un bouclage manuel ou d'une réutilisation d'objets d'animation. Si l'exécution précédente utilisait StartFromCurrent, et l'exécution suivante utilise une valeur StartValue, StartFromCurrent doit alors être défini sur False.

Pour arrêter l'animation :

  • Définir Pause sur True permettra à l'animation de reprendre à partir de ce point, en le redéfinissant sur False.
  • Appeler Stop effectuera un saut jusqu'à la fin de l'animation. La propriété est définie sur la valeur finale (StopValue si Inverse vaut False, StartValue si Inverse vaut True), et OnFinish est déclenché.
  • StopAtCurrent ne définit pas la propriété sur la valeur finale, mais déclenche toujours OnFinish.

Déclencheurs d'animation

En plus de démarrer automatiquement avec Enabled et d'appeler manuellement Start et Stop, les animations peuvent être déclenchées à partir de modifications de propriétés. Les déclencheurs ne fonctionnent pas avec chaque propriété arbitraire, mais seulement avec des propriétés particulières qui sont vérifiées pendant le traitement interne des événements du composant. Tous les déclencheurs intégrés vérifient les propriétés booléennes, et par convention les noms de ces propriétés commencent par "Is". TControl et TControl3D fournissent quatre déclencheurs pour chaque contrôle et forme :

Voici d'autres déclencheurs intégrés :

Remarque : Un jeu légèrement différent de déclencheurs est fourni pour d'autres effets d'images sans animation.

Les animations peuvent être définies sur Start quand l'une de ces propriétés change suite à une action de l'utilisateur ou au code. Quand la condition du déclencheur n'est plus en vigueur, l'animation s'arrêtera. Les conditions des déclencheurs sont limitées aux vérifications d'égalité, et si le déclencheur contient plusieurs conditions, elles doivent toutes être évaluées à true pour que le déclencheur se déclenche. Un déclencheur est exprimé sous la forme d'une chaîne contenant une ou plusieurs conditions de déclencheur, séparées par des points-virgules. Chaque condition de déclencheur est constituée du nom de la propriété, d'un signe égal et de la valeur de déclenchement. Tous les déclencheurs intégrés sont booléens, ainsi leur valeur doit être "true" ou "false". Par exemple :

IsMouseOver=true;IsPressed=false

Les conditions des déclencheurs sont stockées dans deux propriétés, Trigger et TriggerInverse. Comme leur nom le suggère, la première démarrera simplement l'animation comme défini, tandis que la deuxième définira d'abord l'indicateur Inverse de l'animation. En raison de la façon dont les animations s'exécutent en mode inverse, et de la façon dont les animations "s'arrêteront à la fin" immédiatement quand la condition n'est plus en vigueur, au lieu d'une seule animation avec des conditions de déclencheur opposées, parfois deux animations distinctes définies comme opposées sont requises, chacune avec l'un des déclencheurs opposés.

Inversion et bouclage

Inverse fonctionne en "inversion temporelle" ; il n'inverse pas les valeurs de démarrage et d'arrêt. Par conséquent, avec Inverse et StartFromCurrent tous deux à True, la propriété sautera d'abord à StopValue, puis animera en revenant à la valeur au moment où l'animation a démarré : en effet, "arrêter à la position en cours" (comme le booléen StartAtCurrent, pas la procédure StopAtCurrent).

Une animation peut boucler, dans la même direction ou d'avant en arrière comme un balancier avec AutoReverse.

Animation personnalisée

Des composants d'animation personnalisée peuvent être créés en sous-classant TAnimation et en implémentant  ProcessAnimation.

Voir aussi