Windows標準の音量設定

解決


WAM  2003-12-07 11:04:37  No: 5960  IP: [192.*.*.*]

Windows標準の音量設定(Sndvol32.exe)みたいに、
マウスでスライドバーを調整し、マウスボタンを離すと[一般の警告音]で指定
されているWAVEファイルを再生するにはどうすればいいのでしょうか?
Sndvol32.exeと同等の動作をするものが作りたいのですが・・・

編集    削除
WAM  2003-12-07 11:07:41  No: 5961  IP: [192.*.*.*]

追記です。
D7、WinXPHome を使用しています。

編集    削除
たかみちえ  URL  2003-12-07 20:16:52  No: 5962  IP: [192.*.*.*]

http://www.terra.dti.ne.jp/~vivas/
上記サイトにあるTMixerコンポーネントを使えば音量設定が出来ます。
テストサウンドはPlaySoundで鳴らせますね。
サウンドにつけられている名前の一覧は、
HKEY_CURRENT_USER\AppEvents\EventLabels
いかに載ってます。

編集    削除
WAM  2003-12-07 23:57:41  No: 5963  IP: [192.*.*.*]

たかみちえさん、ご返信ありがとうございます。
今からバイトなので、帰ってきてからやってみます。

編集    削除
WAM  2003-12-08 09:05:35  No: 5964  IP: [192.*.*.*]

すいません、コンポーネントですが、すでにPAPY氏が製作された
音量ボリューム調節くんを使用しています。
WAVE再生はわかりましたが、トラックバーにマウスを放したときのイベントが
ないみたいなので、D&Dでトラックバーで音量調整→マウス放す→WAVE再生
ができないようです。

編集    削除
Halbow  2003-12-08 09:38:43  No: 5965  IP: [192.*.*.*]

Halbow です。

> トラックバーにマウスを放したときのイベントがないみたいなので

VCL のイベントにないだけで、本当はコモンコントロールはメッセージを送って知らせているんです。以下のようにしてこれを捕まえられます。Form1 の Trackbar1 と Label1、Label2 を置いて

    { Private 宣言 }
  public
    OriginalProc:TWndMethod;
    procedure SubclassProc(var Msg:TMessage);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  Commctrl;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OriginalProc := TrackBar1.WindowProc;
  TrackBar1.WindowProc := SubclassProc;
end;

procedure TForm1.SubclassProc(var Msg: TMessage);
begin
  OriginalProc(Msg);
  case Msg.Msg of
    CN_HSCROLL,CN_VSCROLL:
      if Msg.WParamLo = TB_ENDTRACK then
        Label1.Caption := IntToStr(Trackbar1.Position);
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
   Label2.Caption := IntToStr(Trackbar1.Position);
end;

のようにすると、つまみを動かしているときの位置が Label2 に、そしてマウスを離したときの位置が Label1 に表示されます。

編集    削除
WAM  2003-12-08 10:59:39  No: 5966  IP: [192.*.*.*]

できました!!
たかみちえさん、そしてHalbowさん、ありがとうございました。
できるってすばらしいw

編集    削除