如何忽略Delphis MessageDlg中的计时器事件

Alo*_*mer 5 delphi delphi-2006

我在Delphi中设置了一个全局异常处理程序.在某些严重的异常上会显示一条错误消息(后跟Halt()).显示错误消息时,Delphi正在处理消息队列,处理计时器事件,从而导致进一步的错误.

我想要的是显示一个不处理计时器事件的错误对话框.德尔福怎么可能?

编辑:我使用Dialogs.MessageDlg(...)来显示消息.

Dav*_*nan 4

您可以过滤排队的消息,例如WM_TIMER、 和TApplication.OnMessage

procedure TMainForm.ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if ShowingFatalErrorDialog then
    if Msg.Message = WM_TIMER then
      Handled := True;
end;
Run Code Online (Sandbox Code Playgroud)

将该事件处理程序直接分配给Application.OnMessage或使用TApplicationEvents对象。

显然,您必须提供实现ShowingFatalErrorDialog,但我相信您很清楚如何做到这一点。