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

C++Builder Discussion :

pb de gestion des interruptions pendant la lecture d'un son [À faire]


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut pb de gestion des interruptions pendant la lecture d'un son
    Bonjour,

    J'ai une application qui comporte plusieurs boutons, à chacun desquels est associé un son.
    Je voudrais que quand un son est en cours de lecture, l'utilisateur ne puisse pas cliquer sur un autre boutton. J'utilise donc la fonction "sndPlaysound",avec comme argument "SND_SYNC".
    Le problème est qu'avec cet argument, si l'utilisateur clique sur un autre boutton pendant que le son est joué, Borland enregistre l'évenement 'click' sur ce dernier, attend la fin du son précédent, et joue le son suivant.
    Est-il possible d'inhiber le fait que Borland enregistre les évènements du type "click" sur un boutton lors de l'exécution d'un programme ?
    Dans le cas contraire, quelqu'un voit-il une solution à mon problème ?

    Merci d'avance pour votre réponse.
    Cordiales salutations.

    Vincent

  2. #2
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    bonjour

    Pourquoi ne pas utiliser une liste d'action ? ActionList

    Ajouter une action pour chaque bouton, puis code les 2 event Onexecute et onUpdate.
    Initialise la propriete Action de chaque bouton, avec les actions que tu a creer.
    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
     
    code pour l'action ActSaveSQL.
    //---------------------------------------------------------------------------
    void __fastcall TMainFrm::ActSaveSQLExecute(TObject *Sender)
    {
        SaveDialog->FilterIndex = 2;
        if (SaveDialog->Execute())
            MemoSQL->Lines->SaveToFile(SaveDialog->FileName);
    }
    //---------------------------------------------------------------------------
    void __fastcall TMainFrm::ActSaveSQLUpdate(TObject *Sender)
    {
        //--- Seulement si le QBE n'est pas vide
        ((TAction*)Sender)->Enabled = MemoSQL->Lines->Count;
    }
     
       ......
       BtnSaveSQL->Action = ActSaveSQL
       .....
       Le bouton BtnSaveSQl est enable seulement si MemoSQL a des lignes
    Se produit quand l'application est inactive, de telle sorte que la liste d'actions peut mettre à jour une action particulière de la liste.

    __property TActionEvent OnUpdate = {read=FOnUpdate, write=FOnUpdate};

    Description

    Ecrivez un gestionnaire d'événement OnUpdate pour configurer les propriétés d'une action particulière de la liste afin qu'elle reflète les conditions en cours.

    Quand l'application est inactive, elle boucle sur chaque action en lui donnant la possibilité de se mettre à jour elle-même afin de refléter les conditions en cours. Pour chaque action, le premier événement à se déclencher dans cette séquence est l'événement OnUpdate de la liste d'actions. Si le gestionnaire d'événement OnUpdate définit son paramètre Handled à true, l'action est considérée comme mise à jour et le traitement s'arrête ici. Cela bloque l'exécution de tous les autres gestionnaires d'événements ou de toute réponse intégrée par une classe d'action prédéfinie.
    Donc dans chaque OnUpdate tu test quel est l'etat de ton application et si tu autorise ou non l'utilisation du bouton.
    Pendant qu'un son est joué, les autres bouton sont disabled.

    Voila
    Bon courage

    Alain

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bojour, et merci pour ta réponse.

    J'ai fait un petit test en utilisant une ActionList. Je pense que c'est effectivement la solution à mon problème.Pour continuer, j'aurais juste besoin d'une dernière info : quand on est dans la fonction ActionExecute(TObject *Sender), est-il possible de connaître le bouton qui est responsable de l'action ? (je ne vois pas de propriétés du type "Parent" ou autre pour l'objet de type TAction).

    Merci d'avance

    Vincent

  4. #4
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Sender doit être le composant qui a lancé l'événement non, comme pour tous les événements non ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    C'est également ce que je pensais, mais si à l'entrée de la fonction je fait quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TButton *ptrButton=(TButton*)Sender;
    j'obtiens dans la propriété "name" de mon bouton celui de l'action.....
    [Balise [code] ajouté par netah_25]

  6. #6
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    bonsoir

    j'obtiens dans la propriété "name" de mon bouton celui de l'action
    C'est normale le sender c'est l'action et non pas le bouton
    Pourquoi a tu besoin de connaitre le nom du bouton ?

    ALain

  7. #7
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    Je crois plûtot que le Sender c'est l'objet qui a généré l'évenement, donc si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString nombouton=((TButton *)Sender)->Name;
    tu obtiens le nom du bouton qui t'a généré l'évènement ...

  8. #8
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    bonjour

    Et non, fait un test, tu obtient le nom de l'action, L'object qui à généré l'event et un TAction

    Par exemple dans OnUpdate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      ((TAction*)Sender)->Enabled = MemoSQL->Lines->Count;
    Sender est une TAction, l'etat du bouton change, mais au traver de l'etat de la TAction qui lui est associée

    ALain

Discussions similaires

  1. gestion des interruptions en C
    Par pfeuh dans le forum Windows
    Réponses: 11
    Dernier message: 14/11/2007, 10h13
  2. gestion des interruptions
    Par jsebfranck dans le forum Langage
    Réponses: 2
    Dernier message: 06/07/2007, 09h15
  3. Gestion des interruptions du µProcesseur
    Par herve13 dans le forum Assembleur
    Réponses: 3
    Dernier message: 22/08/2005, 20h51
  4. Gestion des interruptions du microprocesseur sous XP
    Par herve13 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 20/08/2005, 18h29
  5. Réponses: 7
    Dernier message: 05/08/2005, 16h32

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