delphi报警声音 Beep、MessageBeep 和 Windows.Beep


本文整理自网络,侵删。

 
我的办法,增加一个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);
   end
end;
 
 
===============================================
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 取 utc/tfiletime 时间

Delphi idhttp友好错误信息的捕获

Delphi 通过pid获取进程名

Delphi firedac 下的 sqlite [2] - 第一个例子

Delphi xe5 android 调用手机震动(通过jobject测试是否支持震动)

Delphi fdquery获取字段类型

Delphi取代sleep的延时代码

Delphi program name、process id、window handle、process handle 的转换函数

Delphi 打开android应用信息

Delphi气泡提示

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...