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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Pascal Discussion :

Donner la parole à une application


Sujet :

Contribuez Pascal

  1. #1
    Rédacteur
    Avatar de Chrispi
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Juin 2020
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2020
    Messages : 242
    Par défaut Donner la parole à une application
    Bonjour,

    Je vous propose 2 méthodes pour faire parler une application (sous Windows) selon les actions réalisées dans celle-ci.

    Première méthode

    Pour commencer, nous posons 3 boutons sur une forme.

    Ensuite, nous mettons comobj dans les clauses uses.

    Nous déclarons la procédure que nous allons créer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      private
        procedure Parler(Vx: Word);
    Créons la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure TForm1.Parler(Vx: Word);
    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);
        Case Vx of //Ce qui peut être dit par l'application
        0 : SpVoice.Speak('Bonjour', 0);
        1 : SpVoice.Speak('Vous avez utilisé la première procédure', 0);
        2 : SpVoice.Speak('Au revoir', 0);
        end;
      finally
      //Restaurer le masque FPU
        Set8087CW(SavedCW);
      end;
    end;
    Codons les boutons de manière à faire parler l'application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Parler(0);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Parler(1);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      Parler(2);
      Close;
    end;
    Important : Pour que l'application prononce les caractères accentués correctement, il faut ajouter l'option -FcUTF8 aux options de compilation passées à FPC (dans l'EDI Lazarus Projet / Options du projet.../ Options du compilateur / Options personnalisées) et compiler ensuite.

    Deuxième méthode

    Avec les mêmes composants, nous allons obtenir un résultat identique à celui de la méthode proposée précédemment.

    Ici aussi, nous mettons comobj dans les clauses uses.

    Nous déclarons la procédure que nous allons créer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      private
        Procedure Speaker(Vk: Widestring);
    Créons la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Procedure TForm1.Speaker(Vk: Widestring);
    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;
    Codons les boutons de manière à faire parler l'application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Speaker('Bonjour');
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Speaker('Vous avez utilisé la deuxième procédure');
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      Speaker('Au revoir');
      Close;
    end;
    Comme dans la première méthode, il faut ajouter -FcUTF8 aux options de compilation avant de compiler le projet.

    Maintenant, à vous de choisir la méthode qui vous semblera la plus judicieuse à utiliser dans vos projets.

  2. #2
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 132
    Billets dans le blog
    5
    Par défaut
    Je viens de tester ça fonctionne super bien. Ce sujet est à mettre en tutoriel ou en article. Bravo!!

  3. #3
    Rédacteur
    Avatar de Chrispi
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Juin 2020
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2020
    Messages : 242
    Par défaut
    Bonjour Rémi,

    Ce sujet est à mettre en tutoriel ou en article.
    Je ne sais pas si ça vaut le coup de le mettre en tuto (peut-être que oui). C'est assez long pour publier sous ce mode. Il faut passer le cap de la relecture technique. C'est normal, mais pour moi qui ne suis pas un développeur professionnel, par expérience ça peut être un peu laborieux car je ne maîtrise pas encore toutes les subtilités de la programmation. Bien sûr, si les responsables de la rubrique me le demandent, je ferai l'effort de passer cette publication en mode tuto.
    Merci pour ton message qui m'a tout de même bien fait plaisir.

    Christophe

  4. #4
    Membre expérimenté Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 325
    Par défaut
    Bonjour Chrispi,
    Un petit tuto a été déposé à ce sujet par Yohann :
    https://delphipage.developpez.com/sapi/
    Cordialement,

  5. #5
    Rédacteur
    Avatar de Chrispi
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Juin 2020
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2020
    Messages : 242
    Par défaut
    Bonjour Galet,

    Merci pour ce lien. J'y avais déjà jeté un œil.

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 132
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Chrispi Voir le message
    C'est normal, mais pour moi qui ne suis pas un développeur professionnel, par expérience ça peut être un peu laborieux car je ne maîtrise pas encore toutes les subtilités de la programmation.
    Pas besoin d'être un pro de la programmation pour faire des tuto ou des articles. Il y a de très bon amateurs qui font dès fois beaucoup mieux que des professionnels chevronnés.

Discussions similaires

  1. Donner le focus à une application externe
    Par Betize dans le forum C#
    Réponses: 3
    Dernier message: 01/07/2013, 10h33
  2. Aide: une application avec base de donner sur le web
    Par maverick_lp28 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 16/04/2009, 13h21
  3. [C#]donner un style windows vista a une application
    Par drayif dans le forum Windows Forms
    Réponses: 8
    Dernier message: 18/07/2007, 02h43
  4. Donner le focus a une application
    Par HopeLeaves dans le forum Delphi
    Réponses: 12
    Dernier message: 22/06/2006, 09h43
  5. [VB]donner le focus à une application déja ouverte ou fermée
    Par Nicko29 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 21/01/2006, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo