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


Delphi et Living Actor

Juin 2003

Par Benoit Vermersch - vermerschb@mailup.net

3-2 La Parole

Le chemin du mp3 doit être relatif au dossier de l'application. Nous allons donc créer une procédure qui copiera le fichier sélectionné par l'opendialog dans le dossier de l'exécutable.

Tout d'abord, déclarez deux variables dans l'emplacement 'var' de votre fiche :

Ensuite, tout au début du bloc 'Implementations', vous pouvez écrire la procédure copie.

var
Form1: TForm1;
mp3,mp32 : string;

implementation

{$R *.dfm}


procedure copie;
var S, T : TFileStream;
begin
S:=TFileStream.Create(mp3, fmopenread);
T:=TfileStream.Create(ExtractFilepath(paramstr(0)) + ExtractFileName(mp3), fmopenwrite or fmcreate);
mp32:=ExtractFileName(mp3);
T.CopyFrom(S, S.size);
T.free;
S.free;
end;

Nous utilisons ici la méthode FileStream qui permet de copier facilement des fichiers. S est associée au fichier d'origine choisi par l'utilisateur. On copie son contenu dans T qui sera enregistré dans le dossier d'où l'application est exécutée.

Il faut aussi écrire le code de l'événement Onclick de button3 pour afficher l'opendialog, assigner le nom du fichier à la variable 'mp3', et lancer la procédure de copie qui copiera mp3 dans le dossier de l'application. Nous n'aurons plus qu'à spécifier 'mp32' en argument de notre commande Living Actor pour entendre ce son.

procedure TForm1.Button3Click(Sender: TObject);
begin

opendialog1.Execute;
mp3:=opendialog1.filename;
copie;
end;

 

Il ne reste alors plus qu'à écrire le code du bouton 'Parler' (button4) :

Code Explication
procedure TForm1.Button4Click(Sender: TObject);
var
i:integer;
begin
If Radiobutton1.Checked then
For i:=0 to Memo1.Lines.Count - 1 do
Actor.Speak(Memo1.Lines[i])
Else If Radiobutton2.Checked then
Actor.Speak('[wave('+mp32+')]')
Else If Radiobutton3.Checked then
For i:=0 to Memo1.Lines.Count - 1 do
Actor.Speak('[wave('+mp32+')] ' + Memo1.Lines[i])
Else
Actor.Speak('j''ai rien de spécial à te dire');
end;




On affiche seulement le texte dans le balloon


On lit seulement le mp3

On effectue ces deux opérations

Si l'utilisateur n'a rien sélectionné, tant pis pour lui

Vous pouvez tester votre application : si la compilation échoue, vérifiez bien votre code.

 

3-3 Un Point sur l'écran

Nous allons réaliser un dernier module qui permettra à l'agent de se déplacer vers un point, de le montrer du doigt ou de simplement le regarder. L'utilisateur choisira d'abord une des actions puis définira les coordonnées du point.

Cantoche offre deux types d'actions pour coder ces opérations :

-simples : MoveTo, LookAt, GestureAt. Vous devez donner les coordonnées d'un point en pixels. Par exemple, le point en bas à droite de l'écran peut être (800,600) ou (1024,768) selon la résolution de votre moniteur.

-normalized : NormalizedMoveTo, NormalizedLookAt, NormalizedGestureAt. Les coordonnées sont exprimées en valeurs relatives : vous n'avez qu'à donner des valeurs comprises entre 0 et 1 sans se soucier de la résolution de l'écran sachant que le point (1,1) désigne le coin en bas à droite.

Tout d'abord, placez un groupbox de caption (pas très original que je vous conseille de changer rapidement) 'Un point' (plus clair). A l'intérieur, placez 2 labels verticalement et en face de chacune d'elles une combobox puis 2 edits. Enfin, insérez un bouton de caption 'Action'.

Voici les autres propriétés à régler :

Composant Propriété Valeur
Label1 Caption Action :
Label2 Caption Point :
Combobox2 Items

NormalizedMoveTo NormalizedLookAt
NormalizedGestureAt

Combobox2 Text Normalized
Edit1 Text x
Edit2 Text y

 

Il ne reste plus qu'à écrire l'événement OnClick du bouton : facile.

procedure TForm1.Button5Click(Sender: TObject);
begin

With Combobox2 do
Begin
If text=Items[0] then
Actor.NormalizedMoveTo(strtofloat(edit1.text),strtofloat(edit2.Text))
Else If text=Items[1] then
Actor.NormalizedLookAt(strtofloat(edit1.text),strtofloat(edit2.Text))
Else

Actor.NormalizedGestureAt(strtofloat(edit1.text),strtofloat(edit2.Text));
end;
end;

On associe les composants à Combobox2

Si le texte correspond au premier item..





Votre application est maintenant terminée. Vous devez être capable de vous servir de Living Actor. Cela va donner pas mal de vie à vos programmes.

Source du programme final

Benoit Vermersch
Terminale S à Rennes
vermerschb@mailup.net
http://www.phidelagents.fr.st

3-4 Le dialogue interactif

Living Actor possède une autre possibilité très agréable : le dialogue interactif par la gestion des balloons (les petites bulles dans lesquelles parle votre acteur). LA permet d'insérer des petites directives appellées Tags dans vos commandes Speak pour inclure à votre texte des liens, des bouton ou encore des zones de texte

On peut ensuite récupérer les informations saisis par l'utilisateur pour entretenir un dialogue entre lui et l'acteur.

Tout d'abord, il faut insérer les tags dans le texte que votre acteur doit lire

-Lien : Actor.Speak('Es tu heureux ? <LINK,yes,OUI ><LINK,no,NON >');

-Bouton : Actor.Speak('Es tu heureux ? <BUTTON,yes,OUI ><BUTTON,no,NON >');

-Zone de texte :Actor.Speak('Es tu heureux ? ');

Remarquez que