На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Help Me: Общая громкость в Win 7 , или как поставить компонент от Торри???
    Решил сделать приблуду -думал делов-то на 5 минут...а н нет, в Вин 7 всё сложно :) Нашел компонент от Торри:
    http://www.torry.net/quicksearchd.php?Stri...olume&Title=Yes
    TAudioVolume v.0.9.3
    Демка от него работает, но компонент установить не получается. Может кто устанавливал-подскажите как и чего там.

    Если что меня интересует общая громкость в Вин7, но и поддержка ХР приветствуется.
      Для ХР(с учётом заявленной поддержки интерфейсов ХР в win7, должно бы работать и в win7):
      Скрытый текст
      unit Unit1;

      interface

      uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,mmsystem, StdCtrls, ComCtrls, ExtCtrls;

      type
      TForm1 = class(TForm)
      VolTrackBar: TTrackBar;
      MixerComboBox: TComboBox;
      procedure FormCreate(Sender: TObject);
      procedure MixerComboBoxSelect(Sender: TObject);
      procedure VolTrackBarChange(Sender: TObject);

      private
      { Private declarations }
      public
      { Public declarations }
      end;

      var
      Form1 :TForm1;
      hmx :HMIXER;
      mxcaps :tmixercaps;
      mxline :mixerline;
      mxlineControls :mixerlinecontrols;
      SPKLineID :DWORD;
      SPKVolumeControlID :DWORD;
      SPKChannels :Cardinal;
      c :array of mixercontrol;
      mxcdetail :TMIXERCONTROLDETAILS;
      volume :array[0..7] of integer;
      implementation

      {$R *.dfm}

      procedure TForm1.FormCreate(Sender: TObject);
      var
      i:integer;
      begin
      if mixergetnumdevs>0 then
      begin
      for i:=0 to mixergetnumdevs-1 do
      begin
      mixerGetDevCaps(i,@mxcaps,sizeof(tmixercaps));
      Mixercombobox.Items.Add(mxcaps.szPname);
      end;
      Mixercombobox.itemindex:=0;
      MixerComboBoxSelect(self);
      end;
      end;

      procedure TForm1.MixerComboBoxSelect(Sender: TObject);
      var i,j,err:integer; DevIndex:integer;

      begin
      voltrackbar.Enabled:=false;
      DevIndex:=Mixercombobox.itemindex;
      mixerGetDevCaps(DevIndex,@mxcaps,sizeof(tmixercaps));

      if mxcaps.cDestinations>0
      then
      for i:=0 to mxcaps.cDestinations-1 do
      begin
      mxline.cbStruct:=sizeof(tmixerline);
      mxline.dwSource:=0;
      mixerGetLineInfo(DevIndex,@mxline,
      MIXER_GETLINEINFOF_DESTINATION or MIXER_OBJECTF_MIXER);
      if mxline.dwComponentType= MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
      then
      if mxline.cControls>0
      then
      begin
      MxLineControls.cbStruct:=sizeof(mixerlinecontrols);
      SPKLineID:=mxline.dwLineID;
      SPKChannels:=mxline.cChannels;

      MxLineControls.dwLineID:=mxline.dwLineID;
      MxLineControls.cControls:=mxline.cControls;
      MxLineControls.cbmxctrl:=sizeof(mixercontrol);
      setlength(c,MxLineControls.cControls);
      MxLineControls.pamxctrl:=@c[0];
      mixerGetLineControls(DevIndex,
      @MxLineControls,MIXER_GETLINECONTROLSF_ALL or MIXER_OBJECTF_MIXER);
      for j:=0 to length©-1 do
      if c[j].dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME
      then
      begin
      voltrackbar.Min:= c[j].Bounds.lMinimum;
      voltrackbar.Max:= c[j].Bounds.lMaximum;
      SPKVolumeControlID:=c[j].dwControlID;
      voltrackbar.Enabled:=true;
      end;
      end;
      end;
      end;

      procedure TForm1.VolTrackBarChange(Sender: TObject);
      var i:integer;
      begin
      mxcdetail.cbStruct:=sizeof(TMIXERCONTROLDETAILS);
      mxcdetail.dwControlID:=SPKVolumeControlID;
      mxcdetail.cChannels:=SPKChannels;
      mxcdetail.hwndOwner:=0;
      mxcdetail.cMultipleItems:=0;
      mxcdetail.cbDetails:=sizeof(MIXERCONTROLDETAILS_UNSIGNED)*SPKChannels;
      for i:=o to SPKChannels-1 do volume[i]:=voltrackbar.Position;
      mxcdetail.paDetails:=@volume;
      mixerSetControlDetails(Mixercombobox.itemindex,@mxcdetail,
      MIXER_OBJECTF_MIXER or MIXER_SETCONTROLDETAILSF_VALUE);
      end;

      end.



      Для регулировки уровня сигнала с линии микшера "выход"/"waveout" можно воспльзоваться функцией waveoutsetvolume. Это проще, чем добираться к нужному контролу микшера "вручную". Но к master_volume(общая громкость/громкость динамиков) доступ возможен только через функции микшера, т.е., так, как в примере. В ХР.
      Сообщение отредактировано: Prince -
        for j:=0 to length©-1 do

        ругается на копирайт :)

        Добавлено
        Исправил тут:
        ExpandedWrap disabled
          voltrackbar.Enabled:=true;
          l:=VolTrackBar.LineSize-1;
          for j:=0 To l do
          if c[j].dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME
          then
          begin
          voltrackbar.Min:= c[j].Bounds.lMinimum;
          voltrackbar.Max:= c[j].Bounds.lMaximum;
          SPKVolumeControlID:=c[j].dwControlID;
          voltrackbar.Enabled:=true;
          end;

        и тут:


        for i:=0 to SPKChannels-1 do volume[i]:=voltrackbar.Position;
        mxcdetail.paDetails:=@volume;
        mixerSetControlDetails(Mixercombobox.itemindex,@mxcdetail,
        MIXER_OBJECTF_MIXER or MIXER_SETCONTROLDETAILSF_VALUE);
        end;

        Ползунок ожил, так как вынес его из цикла-но эффекта не дало.


        В идеале тут библиотечку всё-таки поставить. Так это не просто крутилка громкости. У меня на микроконтролере своя прога которая управляющий сигнал шлет на ПК-а на ПК делфийская приблуда расспознает сигналы и уже должна рулить громкостью. Но чет гемор под семку это.
        Сообщение отредактировано: Boold0zer -
          Цитата
          ругается на копирайт

          :-? Я текст поначалу в тег паскалевкий завернул, проверил, какая-то ерунда получается, часть строк невидимые(белый текст на белом фоне) оказываются.
          ExpandedWrap disabled
            Length(c)
          - длина массива

          Цитата
          Исправил тут:

          Ничего не понял, чего исправил. Всесто нуля буква o? Ну это могло быть, не дотянулся до нуля.
          Цитата
          l:=VolTrackBar.LineSize-1;
          for j:=0 To l do

          Это должен быть цикл, перебирающий контролы выбранной линии микшера. Он находит контрол, управляющий громкостью, запоминает его ID и настривает диапазон трекбара в соответствии с диапазоном контрола.
          for j:=0 to length(с)-1 do
          if c[j].dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME
          then
          begin
          voltrackbar.Min:= c[j].Bounds.lMinimum;
          voltrackbar.Max:= c[j].Bounds.lMaximum;
          SPKVolumeControlID:=c[j].dwControlID;
          voltrackbar.Enabled:=true;
          end;


          Цитата
          Ползунок ожил, так как вынес его из цикла-но эффекта не дало.

          Из какого цикла? :wacko:
          Сообщение отредактировано: Prince -
            Вот из этого же цикла:

            for j:=0 to length(с)-1 do
            if c[j].dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME
            then
            begin
            voltrackbar.Min:= c[j].Bounds.lMinimum;
            voltrackbar.Max:= c[j].Bounds.lMaximum;
            SPKVolumeControlID:=c[j].dwControlID;
            voltrackbar.Enabled:=true;
            end;


            Попрежнему ругаеться на for j:=0 to length(с)-1 do
            Ну и вообще строка Длина Массива - :D фиг бы на минус один. Длина контейнера, внутри которого есть контейнеры со своей длиной.
            Я конечно не супер прогер, но что-то тут не то :)

            Ну и:
            var i,j,err:integer; DevIndex:integer;

            Так лучше: var i,j,err,DevIndex:integer;

            Откуда код взяли? Или киньте проектом, если говорите что парсер код поел...
            Сообщение отредактировано: Boold0zer -
              Цитата
              Вот из этого же цикла:

              Всё-таки внесите его обратно и разберитесь с кодом. Если нужно, подскажу, что знаю. :yes:

              Цитата
              Ну и вообще строка Длина Массива - фиг бы на минус один. Длина контейнера, внутри которого есть контейнеры со своей длиной.
              Я конечно не супер прогер, но что-то тут не то

              А я с тудом разбираю смысл написанного. :) Length(переменная массива) - что не так? Длина контейнера,внутри которого есть контейнеры со своей длиной, опредлеяемой размером mixercontrol. Всё тут то.
              Цитата
              Так лучше

              да это вообще на любителя и на скорость ветра никак не влияет.

              Цитата
              Откуда код взяли?

              Взял и написал. Когда-то.
                хорошо, я вернул всё назад.

                У меня громкость не регулируется. В VolTrackBar Max поставил 1000 Min:=0.
                Насколько я понимаю цикл:
                for j:=0 to length(с)-1 do
                if c[j].dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME
                then
                begin
                voltrackbar.Min:= c[j].Bounds.lMinimum;
                voltrackbar.Max:= c[j].Bounds.lMaximum;
                SPKVolumeControlID:=c[j].dwControlID;
                voltrackbar.Enabled:=true;
                end;

                Ни разу не выполняется, поэтому voltrackbar.Enabled:=true; не происходит, поэтому и не регулируется(оно не ползает, не крутится).
                Надеюсь понятно выражаюсь :) Возможно под ХР и работает этот код, но я сейчас на Вин 7 компилю и тестирую.
                Сообщение отредактировано: Boold0zer -
                  Выполняется ли цикл, можно проверить в отладчике. Ставьте брекпоинт в цикле, сразу увидите. Имхо, он у вас выполняется, но контрол с типом MIXERCONTROL_CONTROLTYPE_VOLUME не обнаруживается. Отчего это может быть, нужно проверять в том же отладчике. В качестве предположения, вы выбираете микшер записи в комбобоксе, вместо микшера воспроизведения. Или же 7-ка даёт о себе знать. Сначала удостоверьтесь в том, что микшер выбран правильный, а дальше только по шагам смотреть, что возвращают функции микшера в переменных
                  mxcaps :tmixercaps;
                  mxline :mixerline;
                  mxlineControls :mixerlinecontrols;
                  c :array of mixercontrol;
                  mxcdetail :TMIXERCONTROLDETAILS;

                  Проверил на звуковых картах креатив и реалтек, на хр. Отрабатывает как положено.
                    Да вот там у меня только Реалтек. но судя по тому компоненту о котором я говорил раннее для Семерки должно быть Динамики (Реалтек ХД), а их нету-поэтому и не работает. Жалко-с семкой не совместимо :(
                      Вот скрин из библиотеки Торри-выбран второй вариант. первый для ХР.
                      Прикреплённый файлПрикреплённый файлExample.jpg (32,76 Кбайт, скачиваний: 470)
                      А в вашей проге только один вариант: Realtek High Definition Audio
                      Если честно незнаю в чем там отличия дикие...но факт-не работает так.
                      Сообщение отредактировано: Boold0zer -
                        Снова не понял. У вас в 7-ке на вашей карте отсутсвует регулировка громкости?
                          ХЗ. В Микшере громкости в Семерке у меня выбрано устройство-Динамики, а не Риалтек. Поэтому ваша программа не регулирует ничего. Если бы в ней определялись Динамики-то тогда все ок, было бы.
                            Если не боитесь, запускайте. Если не работает, тогда желательно вывести все типы линий и контролов(например, в мемо) и посмотреть, что там вообще драйвер возвращает.
                            Прикреплённый файлПрикреплённый файлProject1.rar (163,81 Кбайт, скачиваний: 155)

                            Добавлено
                            Цитата Boold0zer @
                            ХЗ. В Микшере громкости в Семерке у меня выбрано устройство-Динамики, а не Риалтек. Поэтому ваша программа не регулирует ничего. Если бы в ней определялись Динамики-то тогда все ок, было бы.

                            7-ка обращается к звуковушке через свои собственные интерфейсы, и обзывает устройства и линии микшера как хочет [производитель драйверов под 7-ку]. Концепция звуковых устройств 7-ки совершенно иная нежели в xp( уже писал об этом в других темах). Что там и как нащывается на вкладках настроек в 7-ке, не суть важно. Важно, чтобы старые интерфейсы поддерживались драйвером корректно. Что бывает далеко не всегда, но бывает.
                            Сообщение отредактировано: Prince -
                              шляпа. Динамики в списке есть, это единственный пункт меню который разблокирует voltrackbar, на остальные не реагирует.
                              а ну да-громкость по прежнему не регулируется, даже с правами админа.


                              чего бояться вокруг одни виртуалки, песочницы внутри...

                              видимо не поддерживается на данном конфиге (всмысле драйвер виноват, а не конфиг).


                              >>Если не работает, тогда желательно вывести все типы линий и контролов(например, в мемо) и посмотреть, что там вообще драйвер возвращает.

                              Это как, Вы скинули только ехе. Где код поправить?
                              Сообщение отредактировано: Boold0zer -
                                Цитата
                                Динамики в списке есть, это единственный пункт меню который разблокирует voltrackbar, на остальные не реагирует.

                                Я правильно понял, вы запускаете проект и в комбобоксе появляется несколько пунктов: динамики и что-то ещё? При выборе динамиков разблоктруется трекбар, но громкость не регулируется?

                                Цитата
                                вокруг одни виртуалки

                                Что тоже может являться причиной глюков.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0456 ]   [ 20 queries used ]   [ Generated: 23.04.24, 15:20 GMT ]