참고 용으로 다음 두 코드를 혼합하여 사용합니다. TFatalErrorAppEvents와
procedure SaveShowErrorMessage(...)
begin
with TFatalErrorAppEvents.Create(nil) do //avoid timer and further exceptions
try
Dialogs.MessageDlg(...);
finally
Free;
end;
end;
는 다음과 같이
type
TFatalErrorAppEvents = class(TApplicationEvents)
protected
procedure KillTimerMessages(var Msg: tagMSG; var Handled: Boolean);
procedure IgnoreAllExceptions(Sender: TObject; E: Exception);
public
constructor Create(AOwner: TComponent); override;
end;
constructor TFatalErrorAppEvents.Create(AOwner: TComponent);
begin
inherited;
OnMessage := KillTimerMessages;
OnException := IgnoreAllExceptions;
end;
procedure TFatalErrorAppEvents.IgnoreAllExceptions(Sender: TObject; E: Exception);
begin
//in case of an Exception do nothing here to ignore the exception
end;
procedure TFatalErrorAppEvents.KillTimerMessages(var Msg: tagMSG; var Handled: Boolean);
begin
if (Msg.message = WM_TIMER) then
Handled := True;
end;
내가 메시지 만이 그 오류 대화로 해결하는 것이 통과 것이다 있도록 "최종 오류 메시지가 표시됩니다"와 앱의 OnMsg 요격 일부 글로벌 플래그를 가지고해야한다고 생각, 다른 메시지를 걸러 낼 수 있습니다 http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_TApplication_OnMessage.html –
'TTimer' (s)를 사용하면 모든' 대화 상자를 표시하기 전에'Application '에 대한 TTimer를 호출하십시오. 그냥 생각. – kobik
@kobik 그렇다면 전역 예외 처리기는 모든 TTimer를 인식해야합니다. 나는 다른 솔루션을 선호합니다. –