ビープ音


DelphiでBeep手続きを使うと標準の警告音を鳴らすことができますが、これはサウンドボードが入っていれば、Chord.wavか何かが再生されます。つまりホントのビープ音(ブザー)は鳴りません。

どうしてもブザーを鳴らせたいときは、API関数を使う必要があります。WIN32でもBeep関数があるのでこれを使うとブザーを鳴らすことができます。API関数のBeepはWindowsモジュールに含まれていないので、エディタで宣言を追加してやる必要があります。サンプルを下に示します。

 

 Beep(Win32 API)の使用例

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ Win32 API関数の宣言 }
function Beep(dwFreq: LongWord; dwDuration: LongWord): LongBool; stdcall; external 'Kernel32.dll';

{ ビープ音を鳴らす }
procedure TForm1.Button1Click(Sender: TObject);
var
  Freq, Duration: LongWord;
begin
    Freq := StrToInt(Edit1.Text);      // Hz
    Duration := StrToInt(Edit2.Text);  // ms
    Beep(Freq, Duration);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Close
end;

end.