Problème exécution du .EXE

Résolu
Signaler
Messages postés
15
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007
-
Messages postés
15
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007
-
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

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
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;
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
Avec un seul l à successful.

NotifyValue = nvSuccessful
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

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
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
@ElCouz
if Arretautorise then ... est egale a if Arretautorise=true then ...

Ciao
Messages postés
15
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

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 -->
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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)
Messages postés
15
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

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;
 
Messages postés
15
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

Ta procedure simplifie le code mais ne résout pas mon problème
Messages postés
15
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007