Форум - Ответы     (  К темам )
 ?  Daizy: Регулятор громкости (20-12-2002 11:22:34)
Подскажите где можно взять компоненту для работы с регулятором громкости (аналог windows/sndvol32.exe) или как самому организовать это?
 Владимир (08-01-2003 14:13:57) http://cbuilder.ru
Это можно организовать самому, приблизительно так
//---------------------------------------------------------------------------

#include 
#pragma hdrstop

#include "Unit1.h"
#include 

HMIXER hmix;
MIXERCAPS mixcaps;
int VolumeID,volmin,volmax;
MIXERCONTROLDETAILS details;
MIXERCONTROL mixctrl;
MIXERCONTROLDETAILS_UNSIGNED valdets;
DWORD curvolume;
bool svEnable;

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSetVol *SetVol;
//---------------------------------------------------------------------------
__fastcall TSetVol::TSetVol(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Change Volume (-)
void __fastcall TSetVol::SpeedButton1Click(TObject *Sender)
{
  if(!svEnable) return;
  VolBar->Position = VolBar->Position-(VolBar->Max-VolBar->Min)/10;
  if(VolBar->Position < VolBar->Min) VolBar->Position = VolBar->Min;
  details.cbStruct = sizeof(details);
  details.dwControlID = VolumeID;
  details.cChannels = 1;
  details.cMultipleItems = 0;
  details.cbDetails = sizeof(valdets);
  details.paDetails = &valdets;
  if(VolBar->Position > 4000)
    valdets.dwValue = VolBar->Position;
  else
    valdets.dwValue = 0;
  mixerSetControlDetails((HMIXEROBJ)hmix,&details,MIXER_SETCONTROLDETAILSF_VALUE);
}
//---------------------------------------------------------------------------
// Change Volume (+)
void __fastcall TSetVol::SpeedButton2Click(TObject *Sender)
{
  if(!svEnable) return;
  VolBar->Position = VolBar->Position+(VolBar->Max-VolBar->Min)/10;
  if(VolBar->Position > VolBar->Max) VolBar->Position = VolBar->Max;
  details.cbStruct = sizeof(details);
  details.dwControlID = VolumeID;
  details.cChannels = 1;
  details.cMultipleItems = 0;
  details.cbDetails = sizeof(valdets);
  details.paDetails = &valdets;
  if(VolBar->Position > 4000)
    valdets.dwValue = VolBar->Position;
  else
    valdets.dwValue = 0;
  mixerSetControlDetails((HMIXEROBJ)hmix,&details,MIXER_SETCONTROLDETAILSF_VALUE);
}
//---------------------------------------------------------------------------
void __fastcall TSetVol::FormDestroy(TObject *Sender)
{
  if(!svEnable) return;
  mixerClose(hmix);
}
//---------------------------------------------------------------------------
void __fastcall TSetVol::FormCreate(TObject *Sender)
{
  unsigned int i;
  MIXERLINE mixline;
  MIXERLINECONTROLS mixlinectrl;
  MIXERCONTROL mixctrl;

  MMRESULT rc; // Return code.
  rc = mixerOpen(&hmix,0,0,0,0);
  if (MMSYSERR_NOERROR == rc) { ; } else ShowMessage("Error");

  ZeroMemory(&mixline,sizeof(mixline));
  mixerGetDevCaps(0,&mixcaps,sizeof(mixcaps));

  for(i=0; i < mixcaps.cDestinations-1; i++)
   {
     mixline.dwDestination = i;
     mixline.cbStruct = sizeof(mixline);
     mixerGetLineInfo((HMIXEROBJ)hmix,&mixline,MIXER_GETLINEINFOF_DESTINATION);
     if(mixline.dwComponentType==MIXERLINE_COMPONENTTYPE_DST_SPEAKERS) break;
   }
  if(mixline.dwComponentType!=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS)
   {
     ShowMessage("Error. Mixer is disabled !");
     svEnable = false;
     return;
   }
  else
     svEnable = true;

  ZeroMemory(&mixlinectrl, sizeof(mixlinectrl));
  mixlinectrl.cbStruct = sizeof(mixlinectrl);
  mixlinectrl.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
  mixlinectrl.dwLineID = mixline.dwLineID;
  mixlinectrl.cControls = 2;

  ZeroMemory(&mixctrl, sizeof(mixctrl));
  mixlinectrl.cbmxctrl = sizeof(mixctrl);
  mixctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
  mixlinectrl.pamxctrl = &mixctrl;
  mixerGetLineControls((HMIXEROBJ)hmix,&mixlinectrl,MIXER_GETLINECONTROLSF_ONEBYTYPE);

  VolumeID = mixctrl.dwControlID;
  volmin = mixctrl.Bounds.dwMinimum;
  volmax = mixctrl.Bounds.dwMaximum;

  details.cbStruct = sizeof(details);
  details.dwControlID = VolumeID;
  details.cChannels = 1;
  details.cMultipleItems =0;
  details.cbDetails = sizeof(valdets);
  details.paDetails = &valdets;
  mixerGetControlDetails((HMIXEROBJ)hmix,&details,MIXER_GETCONTROLDETAILSF_VALUE);

  curvolume = valdets.dwValue;
  VolBar->Min = volmin;
  VolBar->Max = volmax;
  VolBar->Position = curvolume;
}
//------------------------------------------------------
Пример проекта к C++Builder 6 - здесь (4 Кб)


support@cbuilder.ru