拉萨勒斯帕斯卡的蜂鸣命令

4

我是一名在Windows上运行Lazarus的用户。我想让程序发出“嘟”的声音。看起来可以使用Pascal实现:

windows.beep(300,500);

但在Lazarus中不行!还有其他命令可以使用吗?

更新:

sysutils.beep()

这个方法是可行的,但我真的想要设置声音的频率和持续时间。
3个回答

8
据我所知,这是一个长期运行的功能(Dev Pascal已经超过十年了)。
不同的是,Lazarus不像Delphi一样自动将Windows添加到uses子句中。

有没有简单的解决办法?我真的很想为我正在运行的课程尝试一下频率和持续时间。 - pluke
2
不需要解决方法。只需将“windows”添加到“uses”子句中,它就应该可以工作。 - Marco van de Voort
啊,我现在明白你的意思了,所以 use Windows; 解决了它。谢谢! - pluke

6

如果在Lazarus中未声明此函数,您可以像这样声明它:

function Beep(dwFreq, dwDuration: DWORD): BOOL; stdcall; external 'kernel32.dll';

谢谢Vitaliy,你能展示一下它是如何被调用的吗?我尝试了Beep(300,300);但是它返回一个错误:unit1.pas(34,3) 错误:指定了错误数量的参数来调用“Beep” - pluke
在你声明它之后,只需像这样调用:beep(300,500); - VitaliyG
过程 TForm1.Button1Click(Sender: TObject);开始 Beep(300,300); 结束; 函数 Beep(dwFreq, dwDuration: DWORD): BOOL; stdcall; external 'kernel32.dll';以上是代码。 - pluke
在 DEV Pascal 中,这对我有效,只需将 BOOL 更改为 boolean: function Beep(dwFreq, dwDuration: DWORD): boolean; stdcall; external 'kernel32.dll'; //更改第一个参数并播放您喜欢的歌曲 - sir psycho sexy
嗨,我尝试了那个,但仍然遇到相同的问题。你能在Lazarus v1.2.4中测试一下吗? - pluke
1
在你刚刚调用它 Windows.beep(300, 500)。 - Marco van de Voort

1
在Lazarus中创建一个新项目并添加一个按钮。将windows单元添加到使用列表中。 在按钮的默认事件中放置你的代码:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,

  windows;  // added by manually

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  n,
  freq,dur : integer;

begin
  Randomize;
  for n:=1 to 100 do
    begin
      windows.Beep(random(1000)+n,random(100)+100);
    end;
end;

end.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接