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

API, COM et SDKs Delphi Discussion :

Comment détecter un changement du réglage de voume sonore ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Par défaut Comment détecter un changement du réglage de voume sonore ?
    J'ai dans mon programme un réglage du volume sonore général :

    Je sais donc :

    - modifier le volume sonore dans mon programme,

    - lire le volume sonore général, même s'il est réglé en dehors de mon programme,

    - mais pour détecter automatiquement un changement du volume sonore venant de l'extérieur, je n'ai rien trouvé de mieux que de faire lire répétitivement par un événement Timer le niveau du volume sonore : c'est une procédure assez lourde qui se répète la plupart du temps inutilement toutes les 100 ms par exemple.

    N'y a-t-il pas un moyen plus élégant d'être prévenu dans mon programme lors d'une modification extérieure du voume sonore général ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 62
    Par défaut
    je ne peut pas te répondre, mais ce que tu a fait m'interesse.
    y'aurai moyen que tu m'envoi ton code ?

    Arnaud

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Par défaut
    J'utilise tout simplement le composant TSSVolumeController de Shen Min (http://www.sunisoft.com). La propriété Volume est en lecture écriture donc te permet de connaître mais aussi de modifier le volume.

    Une visite récente sur le site me montre que celui-ci est devenu nettement plus commercial. Il vaut peut-être mieux récupérer le composant sur http://www.torry.net

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 43
    Par défaut
    Il faut utiliser MM_MIXM_LINE_CHANGE ou MM_MIXM_CONTROL_CHANGE.

    Mais pour çà il faut utiliser MixerOpen avant, pour pouvoir recevoir ce message, et çà devient un peu plus compliqué ...

    [edit]
    Youpi, après quelques recherches sur msdn, et une petite dose de google, voilà de quoi te rendre heureux


    Tu ajoutes dans ta form (dans private) la procédure et les variables suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      TForm1 = class(TForm)
    ...
      private
        FCBWndHandle:HWnd;
        FMixer:HMixer;
        procedure VolumeCallBack (var Msg:TMessage);
    ...
    Dans le OnCreate tu mets çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     ... 
     FCBWndHandle := AllocateHWnd (VolumeCallBack);
     If MMSystem.mixerOpen(@FMixer, 0, FCBWndHandle, 0,CALLBACK_WINDOW OR MIXER_OBJECTF_MIXER)<>MMSYSERR_NOERROR then FMixer:=-1;
     ... 
    end;
    et tu n'as plus qu'à mettre ton code dans la procédure VolumeCallBack. Pour savoir quelles infos récupérer dans Msg, va voir sur MSDN. Msg.LParam t'indique le numéro du mixer qui a été changé, çà peut te servir après si tu utilises SetVolume et GetVolume au lieu de passer par un composant.

    N'oublies pas dans ton onDestroy de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
     If FMixer<>-1 then mixerClose (FMixer);
     If FCBWndHandle <> 0 then
        DeAllocateHwnd (FCBWndHandle);
    ...

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Par défaut
    Merci Nicolas : j'ai adapté ton code, et ça marche très bien !

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

Discussions similaires

  1. [Lazarus] Comment détecter le changement d'un TEdit
    Par weberick dans le forum Lazarus
    Réponses: 5
    Dernier message: 22/11/2008, 09h33
  2. Réponses: 2
    Dernier message: 16/07/2008, 08h41
  3. [M1][W1][N1][D1] Comment détecter un changement de résolution?
    Par jazz matazz dans le forum Contribuez
    Réponses: 6
    Dernier message: 04/03/2006, 21h20
  4. [Langue Clavier] Comment détecter le changement de la langue ?
    Par Fares BELHAOUAS dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 30/09/2004, 19h26

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