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'.
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.
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
>');