// ----------------------------------------------------------------------------- // 过程名: TVolume.SetLeftVolume // 参数: Volume: Integer // 返回值: 无 // ----------------------------------------------------------------------------- Procedure TVolume.SetLeftVolume(Volume: Integer); Begin If (Volume < 0) Or (Volume > 255) Then Raise Exception.Create('Range error of the left channel [0 to 255].'); //如果“Volume”参数不在0至255的范围里,则抛出异常。
If FIsMute = False Then Begin waveOutGetVolume(0, @FVolume); //@示指向变量Volume的指针(32位),调用此函数的用意就是得到右声道的值,做到在调节左声道的时候,不改变右声道。 FVolume := FVolume And $FFFF0000 Or (Volume Shl 8); //数字前加$表示是十六进制 waveOutSetVolume(0, FVolume); End //如果不是静音状态,则改变音量; Else FVolume := FVolume And $FFFF0000 Or (Volume Shl 8); //否则,只改变变量。
End;
// ----------------------------------------------------------------------------- // 过程名: TVolume.SetRightVolume // 参数: Volume: Integer // 返回值: 无 // ----------------------------------------------------------------------------- Procedure TVolume.SetRightVolume(Volume: Integer); Begin If (Volume < 0) Or (Volume > 255) Then Raise Exception.Create('Range error of the right channel [0 to 255].');
If FIsMute = False Then Begin waveOutGetVolume(0, @FVolume); FVolume := FVolume And $0000FFFF Or (Volume Shl 24); waveOutSetVolume(0, FVolume); End Else FVolume := FVolume And $0000FFFF Or (Volume Shl 24); End;