⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit4.pas

📁 delphi 多媒体声音控制控件 AMixer
💻 PAS
字号:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  AMixer, ComCtrls, MMSystem;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ListView1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private declarations }
    Mixer:TAudioMixer;
    procedure DoMixerChange (Sender:TObject;MixerH:HMixer;ID:Integer);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var A,B,C:Integer;
    Cnt:PMixerControl;
    LI:TListItem;

  procedure ProcessControl;
  begin
    If B=-1 then
      Cnt:=Mixer.Destinations[A].Controls[C]
    else
      Cnt:=Mixer.Destinations[A].Connections[B].Controls[C];
    If ((Cnt.dwControlType=MIXERCONTROL_CONTROLTYPE_BASS) OR
        (Cnt.dwControlType=MIXERCONTROL_CONTROLTYPE_TREBLE)) then
    begin
      LI:=ListView1.Items.Add;
      LI.Caption:=Cnt.szName;
      LI.SubItems.Add (IntToStr(A));
      LI.SubItems.Add (IntToStr(B));
      LI.SubItems.Add (IntToStr(C));
    end;
  end;

begin
  Mixer:=TAudioMixer.Create (Self);
  If Mixer.MixerCount=0 then
    Exit;
  Mixer.OnControlChange:=DoMixerChange;  
  For A:=0 to Mixer.Destinations.Count-1 do
  begin
    B:=-1;
    For C:=0 to Mixer.Destinations[A].Controls.Count-1 do
      ProcessControl;
    For B:=0 to Mixer.Destinations[A].Connections.Count-1 do
      For C:=0 to Mixer.Destinations[A].Connections[B].Controls.Count-1 do
        ProcessControl;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Mixer.Free;
  Mixer:=nil;
end;

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
  Change: TItemChange);
var MCD:TMixerControlDetails;
    Cntrl:PMixerControl;
    A,B,C:Integer;
begin
  If Mixer=nil then
    Exit;
  If ListView1.Selected=nil then
    TrackBar1.Enabled:=False
  else
  begin
    A:=StrToInt (ListView1.Selected.SubItems[0]);
    B:=StrToInt (ListView1.Selected.SubItems[1]);
    C:=StrToInt (ListView1.Selected.SubItems[2]);
    If B=-1 then
      Cntrl:=Mixer.Destinations[A].Controls[C]
    else
      Cntrl:=Mixer.Destinations[A].Connections[B].Controls[C];
    TrackBar1.Enabled:=True;
    MCD.cbStruct:=SizeOf(TMixerControlDetails);
    MCD.dwControlID:=Cntrl.dwControlID;
    MCD.cChannels:=1;
    MCD.cMultipleItems:=0;
    MCD.cbDetails:=SizeOf(Integer);
    MCD.paDetails:=@C;
    mixerGetControlDetails (Mixer.MixerHandle,@MCD,MIXER_GETCONTROLDETAILSF_VALUE);
    TrackBar1.Position:=C;
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var MCD:TMixerControlDetails;
    Cntrl:PMixerControl;
    A,B,C:Integer;
begin
  If Mixer=nil then
    Exit;
  If ListView1.Selected=nil then
    TrackBar1.Enabled:=False
  else
  begin
    A:=StrToInt (ListView1.Selected.SubItems[0]);
    B:=StrToInt (ListView1.Selected.SubItems[1]);
    C:=StrToInt (ListView1.Selected.SubItems[2]);
    If B=-1 then
      Cntrl:=Mixer.Destinations[A].Controls[C]
    else
      Cntrl:=Mixer.Destinations[A].Connections[B].Controls[C];
    TrackBar1.Enabled:=True;
    MCD.cbStruct:=SizeOf(TMixerControlDetails);
    MCD.dwControlID:=Cntrl.dwControlID;
    MCD.cChannels:=1;
    MCD.cMultipleItems:=0;
    MCD.cbDetails:=SizeOf(Integer);
    C:=TrackBar1.Position;
    MCD.paDetails:=@C;
    mixerSetControlDetails (Mixer.MixerHandle,@MCD,MIXER_GETCONTROLDETAILSF_VALUE);
  end;
end;

procedure TForm1.DoMixerChange (Sender:TObject;MixerH:HMixer;ID:Integer);
begin
  ListView1Change (Self, nil,ctText);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -