Problème exécution du .EXE

Résolu
revsys Messages postés 15 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 7 juin 2007 - 1 juin 2007 à 11:53
revsys Messages postés 15 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 7 juin 2007 - 1 juin 2007 à 17:28
Bonjour,

Quand j'exécute mon programme à partir de Delphi, toutes mes commandes fonctionnent.
Mais si je lance seulement l'EXE, là une option me permettant de rentrer le nombre de fois où un son doit être lancé (grâce à un edit), ne fonctionne plus .
C'est sûrement dû à la variable que j'utilise qui n'est plus prise en compte.
J'ai trouvé la cause du problème mais je ne sais vraiment pas comment faire pour y remédier.
J'utilise donc la procedure NotifyProc qui "signale" la fin de lecture (mpStopped) et décrémente B. J'ai donc théoriquement une boucle qui fonctionne.
Comme je l'ai dit plus haut, en exécutant par Delphi (F9), tout fonctionne (je rentre 5, le son est joué 5 fois) donc je suppose que NotifyProc fonctionne tout autant.
Par contre, en exécutant à partir de l'EXE, le signal mpStopped ne marche plus : le son ne se joue qu'une seule fois.
En appuyant sur la touche Stop, le son reboucle (mpStopped devient alors actif).
Par exemple je rentre 5, le son se joue 1 fois puis 'arrête, je réappuie sur stop, il reboucle et ainsi de suite jusqu'à que 5 passe à 0.

Donc mpStopped de NotifyProc est actif avec delphi mais pas avec l'EXE

Code :

var
    B : integer;
 
procedure TForm1.btJouerClick(Sender: TObject);
begin
    Lecteur;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if(Key <> chr(8))and((Key < '0')or(Key > '9'))then
begin
Key := chr(0); // Permet d'annuler la frappe de la touche
end;
end;
 
procedure TForm1.Lecteur;
begin
 
    if RadioBtmont.Checkedthen   
    begin
        Arretautorise := true;  // evite un bug si nous appuyons sur arreter
                                       // alors q'aucun son WAV n'a été lancé
        MediaPlayer1.FileName := 'C:\Sons expérience\MONTE.wav';
        MediaPlayer1.Open;
        B:= StrToInt(Edit1.Text);  
        MediaPlayer1.Notify := true;
        MediaPlayer1.OnNotify := NotifyProc1;
        MediaPlayer1.Play;    
    end;
 
    if RadioBtdesc.Checkedthen
    begin
        Arretautorise := true;
        MediaPlayer1.FileName := 'C:\Sons expérience\DESC.WAV';
        MediaPlayer1.Open;
        C:= StrToInt(Edit2.Text);
        MediaPlayer1.Notify := true;
        MediaPlayer1.OnNotify := NotifyProc2;
        MediaPlayer1.Play;
    end;
 
end;
 
procedure TForm1.NotifyProc1(Sender: TObject);
begin
   with Sender as TMediaPlayer do
          begin
           if Mode = mpStopped  
              thenbegin
                    Dec(B);  
                    if B > 0then Play   
                   end;
           Notify := True;
          end;
end;
 
procedure TForm1.NotifyProc2(Sender: TObject);
begin
   with Sender as TMediaPlayer do
          begin
           if Mode = mpStopped
              thenbegin
                    Dec(C);
                    if C > 0then Play
                   end;
           Notify := True;
          end;
end;
 
procedure TForm1.btArreterClick(Sender: TObject);
begin
    if Arretautorise then
    begin
        MediaPlayer1.Stop;
    end;
end;

Une idée ?

<!-- / message -->

9 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
1 juin 2007 à 13:03
Salut,

Je n'ai pas Delphi ici, mais il semblerait que TMediaPlayer ai une propriété NotifyValue.

Essaie comme ça (En corrigeant les espaces...) :



procedure TForm1.NotifyProc1(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
if NotifyValue = nvSuccessfull
thenbegin
Dec(B);
if B > 0then Play
end;
Notify := True;
end;
end;
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
1 juin 2007 à 13:05
Avec un seul l à successful.

NotifyValue = nvSuccessful
3
ELCouz Messages postés 135 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 25 juillet 2008
1 juin 2007 à 12:44
Bonjour,

if
RadioBtmont.Checked
then
(je pense que c un bug de copier coller mais yest suposer avoir un espace entre checked and then)

[...]


if Arretautorise then (ou est ta condition la dedans ? c pas un boolean sa non ?)

si jai tord merci de me le dire car je ne sais pas si on peu omettre sa

amicalement,
Laurent
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
1 juin 2007 à 12:53
@ElCouz
if Arretautorise then ... est egale a if Arretautorise=true then ...

Ciao
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
revsys Messages postés 15 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 7 juin 2007
1 juin 2007 à 17:17
Oui merci rt15 ça marche !
Allez savoir pourquoi mpStopped ne fonctionnait pas avec l'EXE...

Mais bon evidemment j'ai encore un petit problème...
La première fois que j'ouvre l'application, le nombre entré est pris en compte, le son est joué x fois.
Mais si je rappuie sur Play, le son est joué (x - 1)fois.
Une idée ?<!-- / message -->
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
1 juin 2007 à 17:19
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9',#08]) then
     Key := #0;
end;

<hr size="2" width="100%" />Croc (click me)
0
revsys Messages postés 15 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 7 juin 2007
1 juin 2007 à 17:21
Le code est le suivant :

procedure TForm1.btJouerClick(Sender: TObject);
begin
    Lecteur;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if(Key <> chr(8))and((Key < '0')or(Key > '9'))then
     begin
          Key := chr(0);
     end;
end;
 
procedure TForm1.Lecteur;
begin
 
    if RadioBtmont.Checkedthen   
    begin
        Arretautorise := true; 
        MediaPlayer1.FileName := 'C:\Sons expérience\MONTE.wav';
        MediaPlayer1.Open;
        B:= StrToInt(Edit1.Text);  
        MediaPlayer1.Play;   
     
        if B <> 1then         
        begin
            MediaPlayer1.Notify := true;
            MediaPlayer1.OnNotify := NotifyProc1
        end;
    end;
 
    if RadioBtdesc.Checkedthen
    begin
        Arretautorise := true;
        MediaPlayer1.FileName := 'C:\Sons expérience\DESC.WAV';
        MediaPlayer1.Open;
        C:= StrToInt(Edit2.Text);
        MediaPlayer1.Play;
    
        if C <> 1then
        begin
            MediaPlayer1.Notify := true;
            MediaPlayer1.OnNotify := NotifyProc2;// Appel de la procédure NotifyProc
        end;
    end;
 
end;
 
procedure TForm1.NotifyProc1(Sender: TObject);
begin
    with Sender as TMediaPlayer do
        begin
            if NotifyValue = nvSuccessful then     // Nouvelle ligne
            begin
                Dec(B);  
                if B > 0then
                begin
                    Play;   
                end;
            end;
Notify := True;
        end;
end;
 
procedure TForm1.NotifyProc2(Sender: TObject);
begin
    with Sender as TMediaPlayer do
        begin
            if NotifyValue = nvSuccessful then    // Nouvelle ligne
            begin
                Dec(C);
                if C > 0then
                begin
                    Play;
                end;
            end;
Notify := True;
        end;
end;
 
procedure TForm1.btArreterClick(Sender: TObject);
begin
    if Arretautorise then
    begin
        MediaPlayer1.Stop;
    end;
end;
 
0
revsys Messages postés 15 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 7 juin 2007
1 juin 2007 à 17:27
Ta procedure simplifie le code mais ne résout pas mon problème
0
revsys Messages postés 15 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 7 juin 2007
1 juin 2007 à 17:28


0
Rejoignez-nous