delphi报警声音 Beep、MessageBeep 和 Windows.Beep
转自:http://blog.csdn.net/yunqian09/article/details/5554527
我的办法,增加一个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报警声音 Beep、MessageBeep 和 Windows.Beep的更多相关文章
- [irving] C# Windows Beep 调用声音文件
方法一:Console.Beep(); 方法二:可以用Console.WriteLine("/a");来代替Beep(). MSDN:http://msdn.microsoft.c ...
- Delphi - GetUserNameEx(学一下导出Windows API,以及Array Char充当缓冲区的用法,下标必须从零开始)
(* * Author : http://www.michael-puff.de * Date : 2006-03-29 * License : PUBLIC DOMAIN *) function G ...
- Delphi中三种方法获取Windows任务栏的高度
第一种:需要引用Windows单元 ShowMessage(IntToStr(GetSystemMetrics(SM_CYSCREEN)-GetSystemMetrics(SM_CYFULLSCREE ...
- DELPHI实现关机,兼容全部WINDOWS系统 转
{=================================================================================================== ...
- Receive Windows Messages In Your Custom Delphi Class - NonWindowed Control - AllocateHWnd
http://delphi.about.com/od/windowsshellapi/a/receive-windows-messages-in-custom-delphi-class-nonwind ...
- c++ beep 演奏一次质量不高的天空之城
beep函数用法: beep(HZ,time); hz是发出多少赫兹声音,time是发声时间(ms) 话不多说,上代码 #include <cstdio> #include <win ...
- C++中发声函数Beep详解
By zhcs 以前,我听过一个神犇用C++函数做的音乐,当时的心里就十分激动:哇,好厉害啊,好神啊. 这次,我终于通过自己无助的盲目的摸索.研究,写出了这篇文章(此时我的内心是鸡冻的233) 下面是 ...
- 用Delphi实现Windows的鼠标钩子函数
Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法没有 ...
- Delphi 屏幕抓图技术的实现
摘 要:本文以Delphi7.0作为开发平台,给出了网络监控软件中的两种屏幕抓图技术的设计方法和步骤.介绍了教师在计算机机房内教学时,如何监控学生计算机显示器上的画面,以保证教学的质量和效果. 引言 ...
随机推荐
- POJ 2456 Aggressive cows---二分搜索法
///3.最大化最小值 /** POJ 2456 Aggressive cows Q:一排牛舍有N (2 <= N <= 100,000) 个,位置为x1,...,xN (0 <= ...
- Idea IntelliJ远程调试教程
总结 第一步:修改startup.sh 在倒第二行加上export JPDA_ADDRESS=8787 最后一行在start前面加上" jpda " 第二步:配置Idea, ...
- [BZOJ1024][SCOI2009]生日快乐解题报告
Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋 ...
- [bzoj4515][Sdoi2016]游戏-树链剖分+李超线段树
Brief Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,A ...
- UVA 10385 Duathlon
Problem HDuathlonInput: standard inputOutput: standard outputTime Limit: 15 seconds A duathlon is a ...
- Winform 中panel的mousewheel鼠标滚轮事件触发
如果将窗体或容器控件(如Panel控件)的AutoScroll属性设置为True时,那么当窗体或Panel容不下其中的子控件时就会出现 滚动条,通过移动滚动条可以上下显示出窗体或Panel中的全部内容 ...
- python中进程池的应用
#原创,转载请联系 假设我们写的一个程序需要运行100个子进程的时候,那么写程序时,不可能循环创建销毁100个进程吧?进程的创建与销毁是很耗系统的资源的. 进程池的作用就体现出来了. 进程池可以控制进 ...
- solr in action 第三章
document: 每个document由一个或者多个域(field)组成,每个域都有自己的类型:string, text, etc. 理论上域的类型有无限多个,因为一个域的类型可以由零个或多个分析阶 ...
- MATLAB规划问题——线性规划和非线性规划
1.线性规划 求线性规划问题的最优解有两种方法,一种方法是使用linprog命令,另一种是使用optimtool工具箱,下面分别介绍这两种方法. ①linprog命令 一般情况下,Linprog命令的 ...
- Laravel跳转回之前页面,并携带错误信息
用Laravel5.1开发项目的时候,经常碰到需要携带错误信息到上一个页面,开发web后台的时候尤其强烈. 直接上: 方法一:跳转到指定路由,并携带错误信息 return redirect('/adm ...