如何用來自音量可調的揚聲器的現代嘟嘟聲取代Windows.Beep?如何用現代嘟嘟聲替換Windows.Beep
回答
試試這個
uses MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound('C:\Windows\Media\sound.wav',
SND_NODEFAULT Or SND_ASYNC Or SND_LOOP);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
sndPlaySound(nil, 0); // Stops the sound
end;
滑稽你應該問。我剛剛閱讀了關於窗口嗶嗶聲的歷史。美國殘疾人行爲已經迫使嗶嗶API在過去的20年裏不會改變。
對於Windows 7,我們解決了這個問題 完全 - 我們感動了所有 功能曾經是包含在Beep.Sys 到用戶 模式系統聲音劑 - 現在當 你調用嘟嘟()API而不是 操縱8254芯片的呼叫是 重新路由到用戶模式代理,其中 實際上播放的聲音。
所以簡短的回答是:獲取Windows 7. 較長的答案是:不要使用嘟嘟api。聽到嘟嘟聲,併發揮它就像你會發揮任何其他噪音。
難道你不覺得操作系統升級是想要改變嗶聲的矯枉過正嗎? – 2010-06-15 13:22:40
嗯,@Ken,如果你想專門調用'Beep' *和*你想要一個不同的聲音,那麼一個新的OS是你唯一的選擇,因此不會矯枉過正。 – 2010-06-15 14:59:20
嗯...... @Rob,如果你打算特意使用Beep(),而不是改變你的操作系統而不是改變你的代碼來使用別的東西,我會懷疑你的某個地方有螺絲鬆動。 ;-) – 2010-06-15 19:04:50
如果您想使用Windows使用顯示一個MessageBox的時候,你可以叫Windows.MessageBeep(MessageID)
其中MESSAGEID映射到的圖標的ID相同的值的MessageBox(MB_OK,MB_ERROR等)「標準」的蜂鳴聲。
這樣做的一個問題是,用戶可以將任何聲音或沒有聲音映射到特定的ID。
關閉聲音的人不是問題!它當然不應該。您的用戶界面不應該依賴聲音。有些人在那裏聽不到聲音,即使Windows仍然配置成它們... – 2010-06-15 12:55:53
@Marjan事實上,它不應該是 - 它應該完全取決於計算機用戶。使用MessageBeep使程序更像Windows本身,這通常是一件好事 – 2010-06-15 22:02:37
您可以使用執行ET BEEP來代替蜂鳴聲,ET BEEP具有各種外來聲音的編輯器。
我喜歡這個 sndPlaySound( 'ding.wav',SND_ASYNC); – Tom 2010-06-15 07:26:34
一定要編寫自己的函數「AppBeep」,不要在整個應用程序中調用sndPlaySound(hardcodedFilenameHere) ! – 2010-06-15 15:37:42