本文整理自网络,侵删。
我的办法,增加一个timer 设置间隔100ms,通过timer的使能否,控制报警声音开关procedure TForm1.Timer1Timer(Sender: TObject);begin Windows.Beep(1200+i_f,10+i_f); if i_f<2000 then begin inc(i_f); endend; ===============================================Delphi 在 SysUtils 单元定义 Beep 方法, 可以发出一个声音, 一般用于提醒和调试.
Beep 其实是调用的 API 函数: MessageBeep(MB_OK); MessageBeep 有下面几种用法可以调用几种不同的声音文件: MessageBeep(MB_OK);MessageBeep(MB_ICONHAND);MessageBeep(MB_ICONQUESTION); {这个不响, 不知道为什么}MessageBeep(MB_ICONEXCLAMATION);MessageBeep(MB_ICONASTERISK);MessageBeep($FFFFFFFF); {同 MessageBeep(MB_OK);}
Beep 同时也是一个 API 函数, 它可以指定声音的高度和长度; 因为和 SysUtils.Beep 重名了, 所以应该这样调用:Windows.Beep(音高, 长度);
譬如: Windows.Beep(440, 2000); 会把一个国际标准音(440HZ)演奏 2 秒钟.另外第一个参数的取值范围是: $25 - $7FFFF.音频表在http://www.cnblogs.com/del/archive/2008/10/22/1316380.html
下面的程序会演奏<奥运会主题歌>的第一句: unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);const t = 800;begin Windows.Beep(330, t); Windows.Beep(392, t); Windows.Beep(262, t*2);
Windows.Beep(294, t); Windows.Beep(330, t); Windows.Beep(196, t*2);
Windows.Beep(262, t); Windows.Beep(294, t); Windows.Beep(330, t); Windows.Beep(392, t); Windows.Beep(294, t*4);end;
end. var I : Integer; begin for I := 0 to 1000 do Windows.Beep(1200 + I, 10 + I); end; 在机器发出声音的时候,窗体是无法进行任何操作的=====================================如果你要播放基本的系统声音,则要用适当的参数调用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.
相关阅读 >>
Delphi firedac 下的 sqlite [2] - 第一个例子
Delphi xe5 android 调用手机震动(通过jobject测试是否支持震动)
Delphi program name、process id、window handle、process handle 的转换函数
更多相关阅读请进入《Delphi》频道 >>