IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

LAZARUS - Animer une application avec un cycle d'images et du son

Ce tutoriel propose des méthodes pour créer une solution simple d'animation développée avec LAZARUS pouvant fonctionner sous WINDOWS et sous LINUX. L'animation est ici présentée comme un préalable à l'ouverture d'une application. Elle est basée sur la reproduction d'un cycle d'apparitions consécutives d'images associé en sa fin à une annonce vocale et un son de transition.

Commentez

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

La finalité de ce tutoriel est de réaliser une animation qui sera lancée avant l'activation de la partie fonctionnelle de l'application. Cette animation s'appuie sur le défilement de quatre images de feux tricolores constituant ainsi un cycle. L'accès à la fiche principale de l'application est possible après un nombre de répétitions du cycle déterminé puis une annonce vocale et enfin l’émission d’un son.

II. Les éléments communs aux méthodes

Afin d'alléger ce tutoriel, dans ce paragraphe sont présentés les éléments qui sont communs aux différentes méthodes qui seront abordées pour élaborer l'animation.

II-A. Le processus

Image non disponible

II-B. Les images

Voici les images utilisées pour construire l'animation :

Image non disponible
Feu0

Image non disponible
Feu1

Image non disponible
Feu2

Image non disponible
Feu3

Un cycle : Feu0 → Feu1 → Feu2 → Feu3

II-C. Les composants spécifiques

Pour réaliser l’animation, l'ensemble des méthodes proposées s'appuient sur deux composants :

  • ImgList1 (TImageList) : sert à stocker et ordonner les images qui seront affichées dans Img1. Après avoir double-cliqué sur le composant, il faut ajouter les images et les ordonner suivant leur numérotation (Feu0 … Feu3).
  • Tempo1 (TTimer) : temporisation permettant de fixer le temps d'affichage de chaque image. Ici, elle est réglée à 500 ms.

III. Deux méthodes compatibles avec Windows et Linux

III-A. Les prérequis

Ces méthodes nécessitent en prérequis l'installation d'une application tierce de synthèse vocale et d'un composant audio spécifique.

III-A-1. L'application de synthèse vocale

Cette application permettra la diction de l'annonce vocale.

L'application de synthèse vocale est espeak. À ce jour gratuite, elle est compatible tant avec Windows qu'avec Linux. Il vous faut donc la télécharger et procéder à l'installation sur votre poste.

Documentationespeak

Téléchargementespeak

Une fois l'installation réalisée, vous constaterez que vous avez installé TTSApp dont le dossier principal est eSpeak. Copiez et collez dans le dossier de votre application l'exécutable espeak qui est dans le dossier command_line.

L'application que vous allez créer ne pourra dire l'annonce vocale que si espeak est installée sur le poste de l'utilisateur.

III-A-2. Le composant audio

Lazarus n'étant pas nativement doté d'un composant audio, il est donc nécessaire d'en installer un. Nous avons choisi Tplaysound.

DocumentationTplaysound

TéléchargementTplaysound

Ce composant permettra de jouer le son de transition (fichier .wav).

III-B. Méthode A1

La première méthode consiste à utiliser deux fiches : FormAnim pour l'animation et FormAppli pour l'application elle-même.

III-B-1. Création des unités et des fiches

Après avoir créé et enregistré le projet, il faut créer les unités et les fiches (formes) :

  • FormAnim et l'unité anim pour la fiche de l'animation ;
  • FormAppli et l'unité appli pour la fiche support de l'application.

Comme la fiche FormAppli est la fiche principale, elle est créée automatiquement. Pour créer la fiche FormAnim, utilisez l’option « Nouvelle fiche » du menu déroulant « Fichier ».

Comme indiqué ci-après, construisez les fiches FormAnim et FormAppli, en disposant les composants nécessaires sur chacune d'elles et modifiez leurs propriétés afin d'obtenir les fonctionnalités attendues.

III-B-2. L'ordonnancement des fiches

Une bonne pratique veut que toutes les fiches ne soient pas chargées au démarrage. Donc, après avoir cliqué dans Lazarus sur Projet → Options du projet → Fiches, Sélectionnez FormAppli et faites-la passer à l'aide des flèches du côté des fiches disponibles puis cliquez sur OK. Cette fiche sera créée au moment opportun, dans la procédure d'animation avec la fiche FormAnim comme propriétaire.

Image non disponible

III-B-3. La fiche animation FormAnim

Cette fiche est le support de l'animation sur laquelle sont déposés les composants à paramétrer.

III-B-3-a. Composants et propriétés

Image non disponible

Composants

Propriétés

TForm

AutoSize : True
BorderStyle : bsNone
Caption : (Vide)
Color : clActiveBorder
Name : FormAnim
Position : poScreenCenter

TImage

Align : alNone
AutoSize : True
Center : True
Height : (Hauteur des images)
Name : Img1
Width : (Largeur des images)

TImageList

Height : (Hauteur des images)
Name : ImgList1
Width : (Largeur des images)

TTimer

Enabled : True
Interval : 500
Name : Tempo1

TProcess

CommandLine : espeak -s 170 -v fr+m5 « Bonjour et bienvenue dans notre nouvelle application »
(Si fichier pour annonce :espeak -s 170 -v fr+m5 -f Annonce.txt)
Executable : espeak
Name : ProcAnn
ShowWindow : swoHIDE

Tplaysound

Name : PlaySon
SoundFile : Son.wav

L'annonce à dire est écrite au niveau de ComandLine du composant ProcAnn ou bien appelée dans un fichier .txt dans lequel elle est écrite. Le fichier est à mettre dans le dossier de l'application.

III-B-3-b. Le code de la fiche animation

La fiche FormAnim est l’une des raisons d'être de ce tutoriel. C'est dans l'onglet de l'unité anim qu'il faut coder l'animation.

Les clauses uses de la fiche sont les suivantes :

 
Sélectionnez
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Uplaysound, Process, Crt;

Afin de déterminer les valeurs du cycle des images (nombre d'exécutions, première image et dernière, il faut fixer des constantes. On les saisit sous les clauses précédentes.

 
Sélectionnez
const
  CNumCycles = 3; // Nombre de cycles
  CPremImg = 0; // Numéro de la première image
  CDerImg = 3; // Numéro de la dernière image

Pour réaliser le passage d'une image à l'autre et compter les répétitions du cycle, il est nécessaire de déclarer deux variables privées dans TFormAnim  : NumImg et NumCycle . Il faut aussi déclarer à ce niveau la procédure d'animation : Animation .

 
Sélectionnez
  private
    NumImg, NumCycle: Integer;
    procedure Animation;

Pour pouvoir appeler la fiche FormAppli à la fin de l'animation, on doit déclarer l'unité appli dans les clauses uses sous { TFormAnim } .

 
Sélectionnez
implementation

{$R *.lfm}

{ TFormAnim }

uses
  appli;

Pour s'assurer que le cycle, lors de l'ouverture de la fiche FormAnim , démarre bien sur la première image, on crée et renseigne sa méthode de création :

 
Sélectionnez
procedure TFormAnim.FormCreate(Sender: TObject);
begin
  NumImg := CPremImg - 1; // Pour bien démarrer sur la première image
end;

Dans ce tutoriel, le code de l'animation s'appuie sur trois répétitions du cycle pendant lesquelles s'affichent l'une après l'autre dans Img1 les quatre images stockées au niveau de ImgList1 . Dans ce composant, la première image du cycle porte le numéro 0 et la dernière le 3 .

Pendant l'animation, grâce à l'utilisation de Tempo1 le composant de temporisation, une image s'affiche comme préalablement paramétré toutes les 500 ms (0,5 sec.). À la fin de la troisième répétition du cycle, une annonce est dite, puis un son de transition est joué. Alors, la fiche FormAppli est créée et appelée à s'ouvrir tandis que FormAnim se ferme et que l'animation est interrompue.

L'annonce est dite grâce au composant ProcAnn qui pilote l'application de synthèse vocale espeak .

Code de la procédure d'animation :

 
Sélectionnez
procedure TFormAnim.Animation; // Procédure d'animation
begin
  if NumImg = CDerImg then // Dernière image ?
    begin
      NumImg := CPremImg; // Retour à la première image
      Inc(NumCycle); // Cycle suivant
      if NumCycle = CNumCycles then // cycles terminés ?
        begin
          ProcAnn.Execute;
          Tempo1.Enabled := False; // Arrêt temporisation
          FormAppli := TFormAppli.Create(FormAnim); // Création de la fiche en attente
          FormAppli.Show; // Ouverture fiche application
          FormAnim.Hide; // Fermeture fiche animation
        end;
    end
  else
    Inc(NumImg); // Image suivante;
    ImgList1.GetBitmap(NumImg, Img1.Picture.Bitmap) // Image en cours du cycle
end;

L'appel de la procédure d'animation est réalisé au niveau du timer Tempo1 qui est paramétré initialement de manière à ce qu'il soit actif dès l'ouverture de FormAnim.

 
Sélectionnez
procedure TFormAnim.Tempo1Timer(Sender: TObject);
begin
  Animation; // Lancement de l'animation
end;

Quant au son de transition, il est joué à l'arrêt du timer Tempo1 en fin d'animation. Afin de laisser un peu de temps pour que l'annonce vocale soit terminée avant que le son de transition soit joué, un délai d'attente de quelques secondes est nécessaire.

 
Sélectionnez
procedure TFormAnim.Tempo1StopTimer(Sender: TObject); // Emission du son de transition
begin
  Delay(3000); // Délai d'attente fin de diction de l'annonce
  PlaySon.Execute;
end;

Le fichier Son.wav doit être déposé dans le dossier de l'application.

Dans ce tutoriel, il n'y a pas de procédure pour arrêter le son. Il est donc recommandé de choisir un son court, c'est-à-dire environ 0,1 seconde.

III-B-4. La fiche application FormAppli

FormAppli n'est présente que pour simuler l'application pour laquelle vous voulez qu'une animation précède son ouverture.

III-B-4-a. Composants et propriétés

Image non disponible

Composants

Propriétés

TForm

Caption : Application
Color : clMoneyGreen
Name: FormAppli

TButton

Caption : Quitter
Name : Btn1

III-B-4-b. Le code de la fiche application

La fiche FormAppli a seulement la fonction dans ce tutoriel de simuler l'application que vous voudriez voir précédée par une animation avant son ouverture. Pour l'exercice, le code est réduit à la fermeture de l'application.

C'est dans l'onglet de l'unité appli qu'il faut coder la fiche application.

Les clauses uses de la fiche sont les suivantes :

 
Sélectionnez
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

Une fois la fiche FormAppli ouverte suite à l'animation, pour la fermer et quitter l'application, il faut renseigner comme suit la méthode de l’événement OnCLick du bouton Quitter  :

 
Sélectionnez
procedure TFormAppli.Btn1Click(Sender: TObject);
begin
  Close; // Fermeture de la fiche
end;

Afin que l'application soit fermée « proprement », c'est-à-dire qu'il ne reste aucun processus en cours en arrière-plan :

 
Sélectionnez
procedure TFormAppli.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Application.Terminate; // Fermeture de l'application
end;

III-C. Méthode A2

Cette méthode ne nécessite qu'une seule fiche. Toutefois, on y retrouve sensiblement les mêmes procédures que dans la première méthode. Dans cette deuxième façon de procéder, l'animation est réalisée sur la fiche FormAppli avant de libérer les contrôles de celle-ci.

III-C-1. La fiche application FormAppli

Dans cette méthode, l'application s'ouvre directement sur la fiche FormAppli. Cependant, tous les boutons et autres contrôles que pourrait détenir cette dernière ne sont accessibles que lorsque l'animation est terminée.

III-C-2. Création de l'unité et de la fiche

Après avoir enregistré le projet, il faut créer l'unité appli et la fiche FormAppli.

Rappel : la fiche est ici support de l'application, mais aussi de l'animation.

Construisez la fiche FormAppli en y disposant les composants nécessaires et modifiez leurs propriétés afin d'obtenir les fonctionnalités attendues.

III-C-3. Composants et propriétés

Image non disponible

Composants

Propriétés

TForm

Caption : Application
Color : clMoneyGreen
Name: FormAppli

TButton

Caption : Quitter
Name : Btn1
Visible : False

TImage

Align : alClient
AutoSize : True
Center : True
Height : (Hauteur des images)
Name : Img1
Width : (Largeur des images)

TImageList

Height : (Hauteur des images)
Name : ImgList1
Width : (Largeur des images)

TTimer

Enabled : True
Interval : 500
Name : Tempo1

TProcess

CommandLine : espeak -s 170 -v fr+m5 « Bonjour et bienvenue dans notre nouvelle application »
(Si fichier pour annonce :espeak -s 170 -v fr+m5 -f Annonce.txt)
Executable : espeak
Name : ProcAnn
ShowWindow : swoHIDE

Tplaysound

Name : PlaySon
SoundFile : Son.wav

III-C-4. Le code de la fiche application

Une fois la fiche prête avec ses composants paramétrés, compilez et passez au code.

Dans cette méthode, la fiche FormAppli est chargée d'emblée .

C'est dans l'onglet de l'unité appli qu'il faut coder l'animation, mais aussi les procédures de l'application elle-même.

Les clauses uses sont les suivantes :

 
Sélectionnez
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, uplaysound, Process, Crt;

Pour déterminer les valeurs du cycle des images (nombre d'exécutions, première image et dernière, il faut fixer des constantes. On les saisit sous les clauses précédentes.

 
Sélectionnez
const
  CNumCycles = 3; // Nombre de cycles
  CPremImg = 0; // Numéro de la première image
  CDerImg = 3; // Numéro de la dernière image

Comme dans la méthode précédente, pour réaliser le passage d'une image à l'autre et compter les répétitions du cycle, il est nécessaire de déclarer deux variables privées : NumImg et NumCycle . Il faut également déclarer à ce niveau la procédure d'animation Animation , mais aussi la procédure Contr qui permettra de rendre accessibles les contrôles implantés sur la fiche tels les boutons.

 
Sélectionnez
  private
    NumImg, NumCycle: Integer;
    procedure Animation;
    procedure Contr(Form: TForm);

Pour s'assurer que le cycle lors de l'ouverture de la fiche FormAnim démarre bien sur la première image, ajouter le code suivant :

 
Sélectionnez
procedure TFormAnim.FormCreate(Sender: TObject);
begin
  NumImg := CPremImg - 1; // Pour bien démarrer sur la première image
end;

La procédure d'animation est identique à celle de la méthode précédente, à la différence qu'il n'y a pas à appeler une autre fiche à la fin de l'animation.

Code de la procédure d'animation :

 
Sélectionnez
procedure TFormAppli.Animation; // Procédure d'animation
begin
  if NumImg = CDerImg then // Dernière image ?
    begin
      NumImg := CPremImg; // Retour à la première image
      Inc(NumCycle); // Cycle suivant
      if NumCycle = CNumCycles then // cycles terminés ?
        begin
          ProcAnn.Execute;
          Tempo1.Enabled := False; // Arrêt temporisation
        end;
    end
  else
    Inc(NumImg); // Image suivante;
    ImgList1.GetBitmap(NumImg, Img1.Picture.Bitmap) // Image en cours du cycle
end;

L'appel de la procédure d'animation est réalisé au niveau du timer Tempo1 :

 
Sélectionnez
procedure TFormAppli.Tempo1Timer(Sender: TObject);
begin
  Animation; // Lancement de l'animation
end;

Suite à l'animation, pour rendre le bouton Btn1 (Quitter) visible, il faut utiliser la procédure suivante :

 
Sélectionnez
procedure TFormAppli.Contr(Form: TForm); // Procédure d'affichage des contrôles...
var
  c: Integer;
begin
  Img1.Hide; // Ferme l'animation
  for c:= 0 to Form.ComponentCount - 1 do
    if Form.Components[c] is TControl then
    TControl(Form.Components[c]).Visible:= True; // Affiche les contrôles
    Img1.Visible:= False; // Rend invisible la dernière image du cycle
end;

On aurait pu utiliser la propriété Visible (True ou False) simplement pour Btn1. Cependant, cette procédure se veut un peu plus générale pour le cas d'applications ayant plusieurs boutons et autres contrôles. Il suffit de définir la propriété Visible de leur ancêtre commun, à savoir TControl…

Lors de l'arrêt du timer Tempo1 en fin d'animation, le son de transition est joué et la procédure Contr est appelée rendant Btn1 accessible. Avant de lancer le son de transition, il faut respecter un délai d'attente de quelques secondes pour que la diction de l'annonce vocale soit terminée.

 
Sélectionnez
procedure TFormAppli.Tempo1StopTimer(Sender: TObject);
begin
  Delay(3000); // Délai d'attente fin de diction de l'annonce
  PlaySon.Execute;
  Contr(FormAppli); // Affiche les contrôles
end;

Le fichier Son.wav doit être déposé dans le dossier de l'application.
Dans ce tutoriel, il n'y a pas de procédure pour arrêter le son. Il est alors recommandé de choisir un son court, c'est-à-dire environ 0,1 seconde.

Une fois la fiche FormAppli accessible suite à l'animation, pour la fermer et quitter l'application, il faut renseigner comme suit la méthode de l’événement OnCLick du bouton Quitter  :

 
Sélectionnez
procedure TFormAppli.Btn1Click(Sender: TObject);
begin
  Close; // Fermeture de la fiche
end;

Afin que l'application soit fermée « proprement » c'est-à-dire qu'il ne reste aucun processus en cours en arrière-plan :

 
Sélectionnez
procedure TFormAppli.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Application.Terminate; // Fermeture de l'application
end;

IV. Deux méthodes seulement compatibles avec Windows

En optant pour ce type de méthodes, vous n'avez ni à installer une application de synthèse vocale, ni un composant pour la lecture des fichiers .wav puisque Windows est nativement équipé des outils permettant de répondre à ces besoins.

Vous retrouverez les mêmes principes de fonctionnement et un code semblable en bien des points à celui utilisé dans les méthodes vues précédemment. Aussi, ne vous étonnez pas de lire des formulations quelque peu identiques.

IV-A. Méthode B1

Comme dans la méthode A1 on crée deux fiches, FormAnim pour l'animation et FormAppli pour l'application elle-même.

IV-A-1. Ordonnancement des fiches

Pour ordonnancer les fiches, il faut procéder comme vu précédemment pour la méthode A1.

IV-A-2. La fiche animation FormAnim

Sur cette fiche support de l'animation sur laquelle sont déposés les composants essentiels à paramétrer, il n'y a pas ni composant Tprocess, ni composant Tplaysound.

IV-A-2-a. Composants et propriétés

Image non disponible

Composants

Propriétés

TForm

AutoSize : True
BorderStyle : bsNone
Caption : (Vide)
Color : clActiveBorder
Name : FormAnim
Position : poScreenCenter

TImage

Align : alNone
AutoSize : True
Center : True
Height : (Hauteur des images)
Name : Img1
Width : (Largeur des images)

TImageList

Height : (Hauteur des images)
Name : ImgList1
Width : (Largeur des images)

TTimer

Enabled : True
Interval : 500
Name : Tempo1

IV-A-2-b. Le code de la fiche animation

C'est dans l'onglet de l'unité anim qu'il faut coder l'animation.

Les clauses uses de la fiche sont les suivantes :

 
Sélectionnez
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, MMSystem, Comobj;

Pour déterminer les valeurs du cycle des images (nombre d'exécutions, première image et dernière, il faut fixer des constantes. On les saisit sous les clauses précédentes.

 
Sélectionnez
const
  CNumCycles = 3; // Nombre de cycles
  CPremImg = 0; // Numéro de la première image
  CDerImg = 3; // Numéro de la dernière image

Pour réaliser le passage d'une image à l'autre et compter les répétitions du cycle, on déclare deux variables privées : NumImg et NumCycle ainsi que la procédure d'animation : Animation comme dans la méthode A1 . Mais ici, il faut aussi déclarer la procédure de l'annonce vocale.

 
Sélectionnez
  private
    NumImg, NumCycle: Integer;
    procedure Animation;
    procedure Annonce(const Vk: Widestring);

Pour pouvoir appeler la fiche FormAppli à la fin de l'animation, on déclare l'unité appli dans les clauses uses sous { TFormAnim } .

 
Sélectionnez
implementation

{$R *.lfm}

{ TFormAnim }

uses
  appli;

Pour s'assurer que le cycle lors de l'ouverture de la fiche FormAnim démarre bien sur la première image, il faut utiliser le code suivant :

 
Sélectionnez
procedure TFormAnim.FormCreate(Sender: TObject);
begin
  NumImg := CPremImg - 1; // Pour bien démarrer sur la première image
end;

L'animation s'appuie sur trois répétitions du cycle pendant lesquelles s'affichent l'une après l'autre dans Img1 les quatre images stockées au niveau de ImgList1 . Dans ce composant, la première image du cycle porte le numéro 0 et la dernière le 3 .

Grâce à Tempo1, le composant de temporisation, une image s'affiche comme préalablement paramétré toutes les 500 ms (0,5 sec.). À la fin de la troisième répétition du cycle, une annonce est dite puis un son de transition est joué. Alors, la fiche FormAppli est créée et appelée à s'ouvrir tandis que FormAnim se ferme et que l'animation est interrompue.

Code de la procédure d'animation :

 
Sélectionnez
procedure TFormAnim.Animation; // Procédure d'animation
begin
  if NumImg = CDerImg then // Dernière image ?
    begin
      NumImg := CPremImg; // Retour à la première image
      Inc(NumCycle); // Cycle suivant
      if NumCycle = CNumCycles then // cycles terminés ?
        begin
          Annonce('Bonjour et bienvenue dans notre nouvelle application'); // Diction de l'annonce vocale
          Tempo1.Enabled := False; // Arrêt temporisation
          FormAppli := TFormAppli.Create(FormAnim); // Création de la fiche en attente
          FormAppli.Show; // Ouverture fiche application
          FormAnim.Hide; // Fermeture fiche animation
        end;
    end
  else
    Inc(NumImg); // Image suivante
    ImgList1.GetBitmap(NumImg, Img1.Picture.Bitmap) // Image en cours du cycle
end;

Pour appeler la procédure d'animation, utiliser ce code :

 
Sélectionnez
procedure TFormAnim.Tempo1Timer(Sender: TObject);
begin
  Animation; // Lancement de l'animation
end;

Pour que l'annonce soit dite, il faut créer la procédure Annonce qui est appelée dans la partie de code concernant la procédure d'animation. Cette procédure sollicite l'interface de programmation d'application vocale (SAPI) développée par Microsoft qui permet la reconnaissance et la synthèse vocale dans les applications Windows.

Code de la procédure Annonce :

 
Sélectionnez
procedure TFormAnim.Annonce(const Vk: Widestring); // Procédure d'annonce vocale
var
  SavedCW: Word;
  SpVoice: Variant;
begin
  SpVoice:= CreateOleObject('SAPI.SpVoice');
  // Optionnel : Réglage vitesse et volume de la voix
  SpVoice.Rate:= 0; // Vitesse de la voix de -10 à 10
  SpVoice.Volume:= 100; // Volume de la voix de 0 à 100
  // Changer le masque d'interruption FPU pour éviter les exceptions
  SavedCW:= Get8087CW;
  try
    Set8087CW(SavedCW or $4);
    SpVoice.Speak(Vk, 0);
  finally
  // Restaurer le masque FPU
    Set8087CW(SavedCW);
  end;
end;

Quant au son de transition, il est joué lors de l'arrêt du timer Tempo1 en fin d'animation.

 
Sélectionnez
procedure TFormAnim.Tempo1StopTimer(Sender: TObject);
begin
  PlaySound('Son.wav',0,SND_ASYNC); // Emission du son de transition
end;

Dans ce tutoriel, il n'y a pas de procédure pour arrêter le son. Il est donc recommandé de choisir un son court, c'est-à-dire environ 0,1 seconde.

IV-A-3. La fiche application FormAppli

Comme dans la méthode A1, FormAppli n'est présente que pour figurer l'application pour laquelle vous voulez qu'une animation précède son ouverture.

IV-A-3-a. Composants et propriétés

Image non disponible

Composants

Propriétés

TForm

Caption : Application
Color : clMoneyGreen
Name: FormAppli

TButton

Caption : Quitter
Name : Btn1

IV-A-3-b. Le code de la fiche application

Comme stipulé précédemment, la fiche FormAppli a seulement la fonction dans ce tutoriel de simuler l'application que vous voudriez voir précédée par une animation avant son ouverture. Le code est volontairement réduit aux simples procédures de fermeture de l'application.

C'est dans l'onglet de l'unité appli que vous codez la fiche application.

Les clauses uses de la fiche sont celles-ci :

 
Sélectionnez
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

Une fois la fiche FormAppli ouverte suite à l'animation, pour la fermer et quitter l'application, il faut renseigner comme suit la méthode de l’événement OnCLick du bouton Quitter  :

 
Sélectionnez
procedure TFormAppli.Btn1Click(Sender: TObject);
begin
  Close; // Fermeture de la fiche
end;

Pour une fermeture « propre », sans laisser de processus ouvert en arrière-plan, utilisez ce code :

 
Sélectionnez
procedure TFormAppli.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Application.Terminate; // Fermeture de l'application
end;

V. Méthode B2

Cette méthode nécessite une seule fiche. Néanmoins, on utilise quasiment les mêmes procédures que dans la méthode précédente. L'animation est réalisée sur la fiche de l'application FormAppli avant de libérer les contrôles de celle-ci.

V-A. La fiche application FormAppli

Comme dans la méthode A2, l'application s'ouvre directement sur la fiche FormAppli. Le principe veut que tous les boutons et autres contrôles que pourrait détenir celle-ci ne soient accessibles que lorsque l'animation est terminée.

V-B. Création de l'unité et de la fiche

Après avoir enregistré le projet, créez la fiche FormAppli et l'unité appli. La fiche est support de l'application, mais aussi de l'animation.

Construisez la fiche FormAppli, en y disposant les composants nécessaires et modifiez leurs propriétés afin d'obtenir les fonctionnalités attendues.

Comme dans la méthode précédente, il n'y a pas les composants Tprocess et Tplaysound.

V-B-1. Composants et propriétés

Image non disponible

Composants

Propriétés

TForm

Caption : Application
Color : clMoneyGreen
Name: FormAppli

TButton

Caption : Quitter
Name : Btn1
Visible : False

TImage

Align : alClient
AutoSize : True
Center : True
Height : (Hauteur des images)
Name : Img1
Width : (Largeur des images)

TImageList

Height : (Hauteur des images)
Name : ImgList1
Width : (Largeur des images)

TTimer

Enabled : True
Interval : 500
Name : Tempo1

V-B-2. Le code

Même principe que dans la méthode A2 , la fiche FormAppli est chargée d'emblée .

V-C. Le code de la fiche application

Codez l'animation, mais aussi les procédures de l'application elle-même dans l'onglet de l'unité appli .

Les clauses uses sont les suivantes :

 
Sélectionnez
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, MMSystem, Comobj;

Pour déterminer les valeurs du cycle des images (nombre d'exécutions, première image et dernière), il faut fixer des constantes. Elles sont saisies sous les clauses précédentes.

 
Sélectionnez
const
  CNumCycles = 3; // Nombre de cycles
  CPremImg = 0; // Numéro de la première image
  CDerImg = 3; // Numéro de la dernière image

Comme dans la méthode précédente, pour réaliser le passage d'une image à l'autre et compter les répétitions du cycle, il est nécessaire de déclarer deux variables privées : NumImg et NumCycle . Il faut également déclarer à ce niveau les procédures d'animation et d'annonce, mais aussi la procédure Contr qui permettra de rendre accessibles les contrôles implantés sur la fiche tels les boutons.

 
Sélectionnez
  private
    NumImg, NumCycle: Integer;
    procedure Animation;
    procedure Annonce(const Vk: Widestring);
    procedure Contr(Form: TForm);

Pour s'assurer que le cycle lors de l'ouverture de la fiche FormAnim démarre bien sur la première image, utilisez ce code :

 
Sélectionnez
procedure TFormAnim.FormCreate(Sender: TObject);
begin
  NumImg := CPremImg - 1; // Pour bien démarrer sur la première image
end;

La procédure d'animation est identique à celle de la méthode précédente, à la différence qu'il n'y a pas à appeler une autre fiche à la fin de l'animation.

Code de la procédure d'animation :

 
Sélectionnez
procedure TFormAppli.Animation;
begin
  if NumImg = CDerImg then // Dernière image ?
    begin
      NumImg := CPremImg; // Retour à la première image
      Inc(NumCycle); // Cycle suivant
      if NumCycle = CNumCycles then // cycles terminés ?
        begin
          Annonce('Bonjour et bienvenue dans notre nouvelle application');
          Tempo1.Enabled := False; // Arrêt temporisation
        end;
    end
  else
    Inc(NumImg); // Image suivante;
    ImgList1.GetBitmap(NumImg, Img1.Picture.Bitmap) // Image en cours du cycle
end;

L'appel de la procédure d'animation est réalisé au niveau du timer Tempo1.

 
Sélectionnez
procedure TFormAppli.Tempo1Timer(Sender: TObject);
begin
  Animation; // Lancement de l'animation
end;

Afin que l'annonce soit dite, il faut créer la procédure Annonce qui est appelée dans la partie de code de la procédure Animation. Comme dans la méthode précédente, cette procédure utilise l'interface de programmation d'application vocale (SAPI) développée par Microsoft.

Code de la procédure Annonce :

 
Sélectionnez
procedure TFormAppli.Annonce(const Vk: Widestring); // Procédure d'annonce vocale
var
  SavedCW: Word;
  SpVoice: Variant;
begin
  SpVoice:= CreateOleObject('SAPI.SpVoice');
  // Optionnel : Réglage vitesse et volume de la voix
  SpVoice.Rate:= 0; // Vitesse de la voix de -10 à 10
  SpVoice.Volume:= 100; // Volume de la voix de 0 à 100
  // Changer le masque d'interruption FPU pour éviter les exceptions
  SavedCW:= Get8087CW;
  try
    Set8087CW(SavedCW or $4);
    SpVoice.Speak(Vk, 0);
  finally
  // Restaurer le masque FPU
    Set8087CW(SavedCW);
  end;
end;

Pour rendre le bouton Btn1 (Quitter) visible, il faut utiliser la procédure suivante :

 
Sélectionnez
procedure TFormAppli.Contr(Form: TForm); // Procédure d'affichage des contrôles…
var
  c: Integer;
begin
  Img1.Hide; // Ferme l'animation
  for c:= 0 to Form.ComponentCount - 1 do
    if Form.Components[c] is TControl then
    TControl(Form.Components[c]).Visible:= True; // Affiche les contrôles
    Img1.Visible:= False; // Rend invisible la dernière image du cycle
end;

On aurait pu utiliser la propriété Visible (True ou False) simplement pour Btn1. Cependant, cette procédure se veut un peu plus générale pour le cas d'applications ayant plusieurs boutons et autres contrôles. Il suffit de définir la propriété Visible de leur ancêtre commun, à savoir TControl…

Lors de l'arrêt du timer Tempo1 en fin d'animation, le son de transition est joué et la procédure Contr est appelée, rendant Btn1 accessible.

 
Sélectionnez
procedure TFormAppli.Tempo1StopTimer(Sender: TObject);
begin
  PlaySound('Son.wav',0,SND_ASYNC); // Emission d'un son
  Contr(FormAppli); // Affiche les contrôles
end;

Dans ce tutoriel, il n'y a pas de procédure pour arrêter le son. Il est alors recommandé de choisir un son court, c'est-à-dire environ 0,1 seconde.

Une fois la fiche FormAppli accessible suite à l'animation, pour la fermer et quitter l'application, il faut renseigner comme suit la méthode de l’événement OnCLick du bouton Quitter  :

 
Sélectionnez
procedure TFormAppli.Btn1Click(Sender: TObject);
begin
  Close; // Fermeture de la fiche
end;

Pour une fermeture « propre », sans laisser de processus ouvert en arrière-plan, utilisez le code suivant :

 
Sélectionnez
procedure TFormAppli.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Application.Terminate; // Fermeture de l'application
end;

VI. Conclusion

Vous arrivez au terme de ce tutoriel. Vous savez maintenant réaliser une animation simple basée sur la rotation en boucle d'un cycle de quelques images qui apparaissent les unes après les autres. À ce carrousel d'images, vous savez associer une annonce vocale et enchaîner avec un son de transition vers la partie « fonctionnelle » de l'application.

Comme vous l'avez sûrement compris, ce type d'animations peut aussi s'intercaler entre n'importe quelles fiches d'applications plus conséquentes.

Si ce tutoriel a pu solliciter quelque peu votre créativité, n'hésitez pas à réaliser une application et à la partager.

VII. Remerciements

Je remercie Alcatîz pour l'intérêt porté à mon travail et l'idée de m'amener à rédiger un tutoriel destiné à un public plus large qui utilise non seulement Windows mais aussi Linux.

Je remercie aussi gvasseur58 pour la relecture technique, les corrections et les conseils apportés. Grâce à lui, j'ai pu découvrir et apprendre encore d'autres façons plus judicieuses et moins alambiquées pour coder certaines procédures.

Je remercie enfin escartefigue pour la relecture orthographique qui permet à chacun de nous de proposer des tutoriels dans lesquels le lecteur ne se heurte pas à des fautes qui pourraient le rebuter.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Christophe PIQUER. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.