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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Synchronisation .WAV et Form


Sujet :

Delphi

  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut Synchronisation .WAV et Form
    Bonsoir,
    Je désire que mon application execute 2 actions de façon simultanée.
    Quand je met ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     begin 
      Form3.Show;
      PlaySound('Voix',GetModuleHandle(Nil),SND_RESOURCE);
      end;
    Le fichier .WAV est entierement lut avant que le Form s'ouvre.
    Je ne sais pas comment m'y prendre
    Un ptit coup de main siouplééé .

    D'avance merci,

    André

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Normal.
    L'appel a Form.Show declanche en evenement d'affichage de la form.
    Cette Evenement s'empile dans la liste des evenement de l'application.
    L'appel a la liste des evenement n'auras lieu qu'apres etre sortit de la procedure, donc de la lecture du fichier.

    Pour resoudre ce probleme, il faut gerer la lecture dans un autre thread.
    LA classe TThread est faire pour ca. Windows propose aussi une api pour gerer ca ...

  3. #3
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut
    Merci pour ta réponse...
    Il va faloir que je cherche encore un peux car je n'ai jamais utilisé la classe TThread.

    André

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Ca n'ets pas tres difficile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Type
      TAudioThread = class(TThread)
      Public
        Procedure Execute; Override;
      End;
     
    Procedure TAudioThread.Execute;
    Begin
    Inherited Execute
    PlaySound('Voix',GetModuleHandle(Nil),SND_RESOURCE);
    End;
    Lancement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Begin
    Form.Show;
    With TAudiothread.Create(true) do
      Begin
      FreeOnTerminate := True;
      Resume;
      End;
    Apres tu peux parametrer ta classe via des property que tu affecte avant le resume pour la rendre plus generique.

  5. #5
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut
    Super merci pour ton aide.
    J'essayerai ça demain matin car il se fait tard et le cerveau ce ramoli .
    Je vous tiendrai au courant...

    André

  6. #6
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut
    Bon voila je travaille dessus depuis ce matin et le résultat n'est pas encore au rdv:

    Quand je met ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TAudioThread.Execute;
    begin
    Inherited Execute;
    PlaySound('julie.wav',0,SND_FILENAME);
    end;
    J'ai un message d'erreur "Abstract Error"...

    Néanmoin quand je ne met que ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TAudioThread.Execute;
    begin
    PlaySound('julie.wav',0,SND_FILENAME);
    end;
    J'ai l'effet que je désire mais je pense que je bloque le thread car je dois rebooter le pc apres.


    André

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    LE plus simple est de voir la definition exacte de ta classe et sa creation.

    A noter que le code proposé est un code ecrit "a la volee" donc non testé. Des erreurs peuvent s'etre insinueusement infiltrés

  8. #8
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut
    Voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    unit Unit4;
     
    interface
     
    uses
      Classes, MMSystem;
     
    type
      TAudioThread = class(TThread)
      private
        { Private declarations }
     
      protected
        procedure Execute; override;
      end;
     
    implementation
     
     
    procedure TAudioThread.Execute;
    begin
    Inherited Execute;
    PlaySound('julie.wav',0,SND_FILENAME);
    end;  
     
     // While Not Terminated Do
              // Begin
              //PlaySound('julie.wav',0,SND_FILENAME);
              // End;
    end;
     
    end.
    André

  9. #9
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    attention, tu as un "end;" en trop dans la procedure execute, suite a une mise en commentaire.

    Je ne sais pas si ca viens de la mais c'est une erreur en tout cas.

  10. #10
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut
    Encore merci pour ton aide...
    Pour le "end" de trop, c'est une erreur de retranscription sur le forum.

    J'ai fais ceci et ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TAudioThread.Execute;
    begin
     PlaySound('JULIE',GetModuleHandle(Nil),SND_RESOURCE);
     Terminate;
    end;
    Je ne sais pas si c'est "propre" comme façon de faire mais ce sujet m'interesse et je l'étudie avec plaisir.
    Je sens que ça va me permettre des trucs nouveaux.

    André

  11. #11
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    A priori le terminate ne sert a rien vu qu'un thread qui sort de sa procedure execute se termine.
    L4appel a execute ne sert d'ailleur pas directement.

    Apres pour l'appel a inherited .. ca m'etonne que ca ne passe pas ... mais j'ia du oublier un petit detail
    Je manipule encore peu ce genre de classe

  12. #12
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !

    Moi j'ai ça dans un projet, qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    type TMonThread = class(TThread)
      private
        Fun_param : SonType;
      protected
        procedure Execute; override;
      public
        constructor Create(un_param: SonType);
    end;
     
    implementation
     
    constructor TMonThread.Create(un_param: SonType);
    begin
      inherited Create(False);
      Priority := tpNormal;
      FreeOnTerminate := True;
      Fun_param := un_param;
    end;
     
    procedure TMonThread.Execute;
    begin
      inherited;
      Form1.Ma_Proc(Fun_param);
      Terminate;
    end;
     
    procedure TForm1.PourAppelThread;
    begin
        TMonThread.Create(le_param);
    end;
    Si ça peut être utile,
    --
    jp

  13. #13
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Par défaut
    Un grand merci.

    J'ai trouvé aussi des expliquations sur la toile et dans l'excellent livre "Delphi 7 studio" et je commence à comprendre le mécanisme.

    André

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Synchronisation de deux forms.
    Par hélène2 dans le forum C#
    Réponses: 1
    Dernier message: 22/04/2009, 16h04
  2. [AC-03] Synchroniser 2 form en l'absence d'index
    Par AndréPe dans le forum VBA Access
    Réponses: 14
    Dernier message: 13/01/2009, 10h56
  3. Synchroniser la fermeture d'un form avec la fin d'un thread
    Par Jitou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/02/2008, 00h46
  4. synchroniser un sous-Form avec un form
    Par maverick91 dans le forum IHM
    Réponses: 1
    Dernier message: 29/11/2006, 10h29
  5. Réponses: 2
    Dernier message: 08/12/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo