bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries Tagged ‘Delphi’

控制 Windows 音效管理員作靜音切換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
uses
  MMSystem;

function GetMasterMute(Mixer: hMixerObj; var Control: TMixerControl): MMResult;
  // Returns True on success
var
  Line: TMixerLine;
  Controls: TMixerLineControls;
begin
  ZeroMemory(@Line, SizeOf(Line));
  Line.cbStruct := SizeOf(Line);
  Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
  Result := mixerGetLineInfo(Mixer, @Line, MIXER_GETLINEINFOF_COMPONENTTYPE);
  if Result = MMSYSERR_NOERROR then
  begin
    ZeroMemory(@Controls, SizeOf(Controls));
    Controls.cbStruct := SizeOf(Controls);
    Controls.dwLineID := Line.dwLineID;
    Controls.cControls := 1;
    Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
    Controls.cbmxctrl := SizeOf(Control);
    Controls.pamxctrl := @Control;
    Result := mixerGetLineControls(Mixer, @Controls,
      MIXER_GETLINECONTROLSF_ONEBYTYPE);
  end;
end;

procedure SetMasterMuteValue(Mixer: hMixerObj; Value: Boolean);
var
  MasterMute: TMixerControl;
  Details: TMixerControlDetails;
  BoolDetails: TMixerControlDetailsBoolean;
  Code: MMResult;
begin
  Code := GetMasterMute(0, MasterMute);
  if Code = MMSYSERR_NOERROR then
  begin
    with Details do
    begin
      cbStruct := SizeOf(Details);
      dwControlID := MasterMute.dwControlID;
      cChannels := 1;
      cMultipleItems := 0;
      cbDetails := SizeOf(BoolDetails);
      paDetails := @BoolDetails;
    end;
    LongBool(BoolDetails.fValue) := Value;
    Code := mixerSetControlDetails(0, @Details,MIXER_SETCONTROLDETAILSF_VALUE);
  end;
  if Code <> MMSYSERR_NOERROR then
    raise Exception.CreateFmt('SetMasterMuteValue failure, ' + 'multimedia system error #%d', [Code]);
end;

// Example:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetMasterMuteValue(0, CheckBox1.Checked); // Mixer device #0 mute on/off
end;

Leave a Comment

Delphi 7 Access violation at address 4085E2C4 in module ‘bdertl70.bpl’

於 Delphi 7 的環境下的專案程式中的 TQuery 元件的 Fields Editor 中要增加欄位出現了下列錯誤訊息

Access violation at address 4085E2C4 in module ‘bdertl70.bpl’. Read of address 00000000.

增加一個新的 TQuery 元件要指定 DatabaseName 屬性也會出現同樣的錯誤
原本是很正常的專案不確定為何會這樣
不過新建一個專案做同樣的處理就不會有同樣錯誤
所以歸納為專案本身的環境問題
才想到前一段時間為了減少 IDE 介面 Palette 上的元件
就去將 Project Options 中將一些沒用到的 Packages 給關掉
不然設計時找元件要點來點去很麻煩
說不定就是元件之間的關連性所導致的問題
趕快把原本關掉的都給弄回來,果然錯誤訊息就不再出現了。

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期迴響

  • 標籤

  • 彙整