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
|