You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除Delphi OnCloseQuery事件中MessageDlg的提示音?

消除Delphi MessageDlg提示音的几种方法

在Delphi 10.4中,MessageDlg会根据消息类型(如mtConfirmation)播放系统默认提示音。要解决关闭程序确认框的提示音问题,可采用以下几种方案:

方法一:使用自定义对话框(推荐)

通过CreateMessageDialog创建自定义对话框,指定mtCustom类型避免默认提示音,同时手动添加图标保持视觉一致性:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Dlg: TForm;
  ResultCode: Integer;
begin
  Dlg := CreateMessageDialog('Do you wish to close the DertSQL program?', mtCustom, [mbYes, mbNo]);
  try
    // 添加确认图标,匹配原对话框视觉效果
    Dlg.Icon.Handle := LoadIcon(0, IDI_QUESTION);
    // 设置默认按钮为No,与原逻辑一致
    Dlg.DefaultButton := mbNo;
    ResultCode := Dlg.ShowModal;
  finally
    Dlg.Free;
  end;
  CanClose := (ResultCode = mrYes);
end;

此方法完全规避默认提示音,且不会影响系统其他设置,是最优选择。

方法二:暂时禁用系统蜂鸣

调用MessageDlg前先关闭系统蜂鸣,完成后恢复原设置:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  iOkToClose: integer;
  OldBeepState: BOOL;
begin
  // 保存当前系统蜂鸣状态
  SystemParametersInfo(SPI_GETBEEP, 0, @OldBeepState, 0);
  // 临时关闭系统蜂鸣
  SystemParametersInfo(SPI_SETBEEP, 0, Pointer(FALSE), SPIF_SENDCHANGE);
  try
    iOkToClose := MessageDlg('Do you wish to close the DertSQL program?',
                  mtConfirmation, [mbYes, mbNo], 0, mbNo);
  finally
    // 恢复原蜂鸣设置
    SystemParametersInfo(SPI_SETBEEP, 0, @OldBeepState, SPIF_SENDCHANGE);
  end;
  CanClose := (iOkToClose = mrYes);
end;

注意:此方法会短时间内关闭系统全局蜂鸣,可能影响其他程序的提示音。

方法三:调用Windows API MessageBox

直接使用系统API对话框,可通过标志控制显示效果(声音播放取决于系统声音方案设置):

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  MsgResult: Integer;
begin
  MsgResult := MessageBox(Handle, 
                          'Do you wish to close the DertSQL program?',
                          PChar(Application.Title),
                          MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2);
  CanClose := (MsgResult = ID_YES);
end;

若需完全无声音,可移除MB_ICONQUESTION标志,但对话框会失去确认图标。

内容的提问来源于stack exchange,提问作者ASLANdata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:05:24