用beep不行!
解决方案 »
- 能否将dbgrideh的页脚统计能否移到表格上面(最好每页都显示总记录数),或者其它三方控件有没有该功能
- Interface not supports
- 散粉,快要 “龙过鸡年” 罗,龙年的朋友,进来拿粉啊!!! 好象快要30了,哈哈
- 散分,感谢CSDN上帮助我的朋友,特别感谢linzhengqun(风)对我的帮助。
- HOT :做程序累了吗?来这里测测你的智商...[转至新浪]
- 怎么判断listbox里为空了,也就是一条数据也没有了
- 如何使TabSheet的enabled属性为false:
- 有没有什么办法,从ACCESS中得到表名?
- treeview动态建立的问题?多谢!!!
- 当今国内哪个软件具有象WINZIP在ctxmenu增加了图标?
- 关于F1Book的注册问题
- 大家帮帮我
http://www.csdn.net/expert/topic/951/951970.xml
这类的程序我曾经写过,在ASUS这类的硬件扬声器的主板没问题,但是在ECS这类的廉价集成的主板上就是从声卡发出来的。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure BeepFor(Tone : word; MSecs,PSecs : integer);
{ Private declarations }
public
function _GetPort(address:word):word;
procedure _SetPort(address,Value:word);
procedure StartBeep(Freq:word);
procedure StopBeep;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
function Tform1._GetPort(address:word):word;
var bValue:byte;
begin
asm
mov dx, address
in al,dx
mov bvalue, al
end;
result:=bvalue;
end;procedure Tform1._SetPort(address, Value:Word);//设置端口
var
bValue: byte;
begin
bValue := Trunc(Value and 255);
asm
mov dx, address
mov al, bValue
out dx, al
end;
end;
procedure Tform1.StartBeep(Freq : Word);//开始发音,Freq为频率
var
B: Byte;
begin
if Freq > 18 then
begin
Freq := Word(1193181 div LongInt(Freq));
B := Byte(_GetPort($61));
if (B and 3) = 0 then
begin
_SetPort($61, Word(B or 3));
_SetPort($43, $B6);
end;
_SetPort($42, Freq);
_SetPort($42, Freq shr 8);
end;
end;
procedure Tform1.StopBeep;//停止发音
var
Value: Word;
begin
value := _GetPort($61) and $FC;
_SetPort($61, Value);
end;{$IFDEF WIN32} Var SysWinNT : Boolean; {$ENDIF}procedure TForm1.BeepFor(Tone : word; MSecs,Psecs : integer);//发出不同音调及不同时间长度的声音
var
StartTime : LongInt;
begin
{$IFDEF WIN32} If SysWinNT Then Windows.Beep (Tone, MSecs) Else {$ENDIF}
begin
StartBeep(Tone);
StartTime:=GetTickCount;
while ( (GetTickCount - StartTime) < LongInt(MSecs) ) do Application.ProcessMessages;
StopBeep;
end;
StartTime:=GetTickCount;
while ( (GetTickCount - StartTime) < LongInt(PSecs) ) do
Application.ProcessMessages;
end;procedure TForm1.Button1Click(Sender: TObject);
var Hour, Min, Sec, MSec:word;
begin
DecodeTime(Time, Hour, Min, Sec, MSec);//将时间解析出?时,分,秒,毫秒
Beepfor(3500,50,50);
Beepfor(3500,50,50);
Beepfor(3500,50,50);
Beepfor(3500,50,50);
Beepfor(3500,50,50);
Beepfor(165,1000,10); //以下一段Beepfor语句奏响海关报时乐曲
Beepfor(131,1000,10);
Beepfor(149,1000,10);
Beepfor(98,1000,10);
Beepfor(98,1000,10);
Beepfor(149,1000,10);
Beepfor(165,1000,10);
Beepfor(131,1000,10);
{
if hour=0 then hour:=24; //到几点即敲几下钟(零点敲24下)
while hour> 0 do
begin
Beepfor(131,1000);
SlientFor(1000);
hour :=hour-1
end; }
end;
{$IFDEF WIN32} Procedure InitSysType;
Var
VersionInfo : TOSVersionInfo;
Begin
VersionInfo.dwOSVersionInfoSize:=SizeOf (VersionInfo);
GetVersionEx (VersionInfo);
SysWinNt:=VersionInfo.dwPlatformID=VER_PLATFORM_WIN32_NT;
End; Initialization
InitSysType;{$ENDIF}
end.