如果你要播放基本的系统声音,则要用适当的参数调用MessageBeep。如果你要用扬声器发声,就调用MessageBeep(-1);。 要播放一个WAV声音,你可以使用对象TmediaPlayer,但如果你要快速播放,最简单的方法是调用API函数sndPlaySound(在mmsystem单元中声明)。 例如: procedure TForm1.Button1Click(Sender: TObject); begin sndPlaySound('C:/Windows/Media/Tada.wav', SND_NODEFAULT Or SND_ASYNC Or SND_LOOP); end; procedure TForm1.Button2Click(Sender: TObject); begin sndPlaySound(nil, 0); //停止发音 end; 如果你要经常播放一种声音,就应该考虑把文件载入内存并从内存中播放: var tada: string; procedure TForm1.Button1Click(Sender: TObject); begin sndPlaySound(Pointer(tada), SND_MEMORY Or SND_NODEFAULT Or SND_ASYNC); end; initialization tada := LoadFile('C:/Windows/Media/Tada.wav'); finalization tada := '; //释放字符串占用的内存。 end. 你可以把一个或多个wave文件嵌入可执行文件中,并从文件中播放。首先建立一个资源文件(.RES)。要做到这点,就要建立一个.RC文件,例如一个叫做sounds.rc的文件: tada wave c:/windows/media/tada.wav chimes wave c:/windows/media/chimes.wav 然后用资源编译器进行编译(Delphi/Bin directory中的BRCC32.EXE),然后就得到一个名为sounds.res的文件,你可以用指令把它装入项目中。使用SND_RESOURCE标志,调用PlaySound(而不是sndPlaySound),就可以从可执行文件中播放声音。 {$R sounds.res} procedure TForm1.Button1Click(Sender: TObject); begin PlaySound('chimes', hInstance, SND_RESOURCE or SND_SYNC); PlaySound('tada', hInstance, SND_RESOURCE or SND_ASYNC); end; 同样,如果你要经常播放一种声音,就应该考虑把文件装入内存并从内存中播放: {$R sounds.res} var tada: Pointer; procedure TForm1.Button1Click(Sender: TObject); begin sndPlaySound(tada, SND_MEMORY or SND_NODEFAULT or SND_ASYNC); end; initialization // 此处我们使用类型转换从而避免使用另一个变量 tada := Pointer(FindResource(hInstance, 'tada', 'wave')); if tada <> nil then begin tada := Pointer(LoadResource(hInstance, HRSRC(tada))); if tada <> nil then tada := LockResource(HGLOBAL(tada)); end; end. |