Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Microsoft Agent

Présentation 

Microsoft Agent a pour but d'aider l'utilisateur d'une application de manière intéractive par l'intermédiaire d'un agent (appelé également "assistant" ). Vous pouvez par exemple trouver les agents Microsoft dans Office (Word, Excel, PowerPoint,...).

Les agents Microsoft offre beaucoup de possibilités intéractives comme l'animation, le déplacement, la parole ou encore la reconnaissance vocale.

Microsoft a crée quatre agents : Génie, Merlin (voir ci-dessus), Peedy et Robby. Il est également possible de créer son propre agent grâce à un éditeur appelé "Agent Character Editor" que vous pourrez trouver sur le site de Microsoft.


Installation

Pour pouvoir utiliser les agents Microsoft dans vos programmes Delphi (à partir de Delphi 3), vous devez installer Microsoft Agent sous Windows :

1. Téléchargez et installez le contrôle ActiveX "Microsoft Agent 2.0" [392Ko] (ce contrôle est déjà installé sous Windows XP).

2. Téléchargez et installez l'agent prénommé "Merlin" [1,78 Mo] que nous allons utilisé dans notre exemple (il existe d'autres agents que vous pouvez installez).

3. Téléchargez et installez "Microsoft Speech API" [824 Ko] et "Text-to-speech engines" (en français) [2.2 Mo] pour que l'agent puisse parler.

4. Téléchargez l'aide au format CHM sur Microsoft Agent [705 Ko].

5. Nous allons maintenant installer le contrôle ActiveX de Microsot Agent dans Delphi.
Allez dans le menu "Composant" de Delphi puis sur "Importer un contrôle ActiveX...". Ensuite, sélectionnez dans la liste "Microsoft Agent Control 2.0".



Cliquez sur le bouton "Installer".

Un nouveau composant se trouve maintenant dans l'onglet "ActiveX" de la palette de composants de Delphi sous le nom de TAgent :



Intègrer un agent Microsoft

Pour commencer, créez un nouveau projet Delphi et placez le composant TAgent dans la fiche.

Afficher un agent

La première opération consiste à afficher l'agent.
Dans un premier temps, on déclare une variable "Merlin" de type "IAgentCtlCharacterEX". Puis dans un deuxième temps, on affiche l'agent grâce au composant TAgent.

private
{ Déclarations privées }
Merlin:IAgentCtlCharacterEX;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Agent1.Connected:=True;
Agent1.Characters.Load('Merlin','Merlin.acs'); //Charge l'agent
Merlin:=Agent1.Characters.Character('Merlin'); //Associe la variable à l'agent
Merlin.Show(0); //Affiche l'agent
end;

Par défaut l'agent est affiché en haut à gauche de l'écran, il est aussi possible de l'afficher n'importe où sur l'écran grâce à la méthode "MoveTo" que nous verrons par la suite.

Cacher l'agent

Pour cacher l'agent, il suffit d'utiliser la méthode "Hide".


Merlin.Hide(0); //Cache l'agent

Animer l'agent

Les agents possèdent des animations communes mais aussi des animations propres à chacuns. Certaines animations possèdent des effets de sons d'autres non.
On utilise la méthode "Play" pour animer l'agent en spécifiant le type d'animation. Pour connaitre tous les types d'animations disponibles pour l'agent, il suffit d'utiliser l'aide au format CHM de Microsoft Agent et de se rendre dans notre cas dans la rubrique "Microsoft Agent Animations for Merlin Character".

procedure TForm1.Button1Click(Sender: TObject);
begin
Merlin.Play('Congratulate'); //Anime l'agent, "Congratulate" est le type de l'animation
end;

Déplacer l'agent

Pour déplacer l'agent, on utilise la méthode "MoveTo".


procedure TForm1.Button3Click(Sender: TObject);
begin
Merlin.MoveTo(0,500,1000); //Déplace l'agent de la position actuelle à la nouvelle position
end;

"0" et "500" est la position X,Y de la nouvelle position en pixels
"1000" correspond à la vitesse de déplacement.

Microsoft Agent    [ 09-01-2004 ]
 Afficher, animer et déplacer un agent.
Télécharger :  [6 Ko] [Télécharger msagent.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Vous pouvez déplacer (ou modifier l'emplacement lors de l'affichage de l'agent) par rapport à la fiche grâce à la méthode "ClientToScreen".

var Point: TPoint; //Définit un emplacement sur l'écran exprimé en pixels
begin
Point.X:=0; //Coordonnée en X
Point.Y:=0; //Coordonée en Y
Point:=ClientToScreen(Point); //Convertit les coordonnées écran en coordonnées relatives à la fiche
Merlin.MoveTo(Point.X,Point.Y,0); //Déplace l'agent
end;

Faire parler l'agent

Pour faire parler l'agent (cela affiche aussi du texte dans une bulle), on utilise la méthode "Speak".


Merlin.Speak('Bonjour',''); //L'agent dit "Bonjour"

TextToSpeech doit être installer (voir la partie Installation de ce tutorial).

Afficher un texte sans faire parler l'agent

Il est possible d'insérer du texte dans la bulle sans faire parler l'agent en utilisant la méthode "Think".

Merlin.Think('Bonjour'); //L'agent ne parle pas

Faire lire un texte complet par l'agent


Ajouter un composant TMemo.
Pour faire lire un texte complet par l'agent, cela consiste à lire une ligne après l'autre.

var i:Integer;
St:String;
begin
for i:=0 to Memo1.Lines.Count-1 do //Pour toutes les lignes...
begin
St:=Memo1.Lines[i];
if not (St='') then Merlin.Speak(St,'') //Lit la ligne d'indice "i" du memo
end;

Pour ne pas lever d'exception, on doit vérifier si pour chaque ligne il y a du texte ou non.

Modifier la parole de l'agent

Microsoft a mis en place des tags pour modifier la parole de l'agent ou ajouter quelques options. Ce tableau récapitule les différents tags.


Merlin.Speak('\Spd=200\Bonjour',''); //Modifie la vitesse de la parole

Vous pouvez obtenir l'aide complète sur ses tags sur le site de Microsoft.


Connaitre le moment où l'action est terminée

Pour cela, on utilise une variable de type "IAgentCtlRequest" ainsi que l'événement "OnRequestComplete" qui permet de détecter lorsqu'une requête est terminé.

private
{ Déclarations privées }
Merlin:IAgentCtlCharacterEX;
Requete:IAgentCtlRequest;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Requete:=Merlin.Play('Congratulate'); //Effectue l'action
end;

procedure TForm1.Agent1RequestComplete(Sender: TObject;
const Request: IDispatch);
begin
if Request=Requete then //Si c'est la bonne requete alors
ShowMessage('Action terminée'); //On affiche un message
end;

Arrêter une action

Pour arrêter une action en cours comme par exemple une animation ou la lecture d'un texte par l'agent, on utilise le même procédé que précèdemment avec une variable "Requete" et la méthode "Stop".

private
{ Déclarations privées }
Merlin:IAgentCtlCharacterEX;
Requete:IAgentCtlRequest;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Requete:=Merlin.Play('Congratulate'); //Effectue l'action
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Merlin.Stop(Requete); //Arrête l'action
end;

Tous droits réservés - Contacts
Haut de la page