如何不显示系统消息 - Delphi

时间:2012-08-17 17:16:39

标签: delphi file delphi-2010

考虑这部分代码:

Try
  arqTXT.LoadFromFile(LogPath);
finally
  ShowMessage(" The log file could not be found. Check if the service is running. ");
end;

在我的消息之后,出现一条系统消息,其中显示以下消息:无法打开文件“C:\ log.txt”。有没有办法不显示这个系统消息?

我正在使用Delphi 2010

感谢。

3 个答案:

答案 0 :(得分:5)

您希望捕获该特定异常(EInOutError,如果我没记错的话),并让其他发生的异常保持取消静音。因此,如果你得到一些其他例外(例如EOutOfMemory),如果不会被“吞噬”,让你看似工作但代码损坏。

try
  ..
except
  on E: EInOutError do
        begin
          ..
        end;
end;

您可以在一个构造中包含许多异常处理程序。任何未处理的异常将继续在try .. except块之外传播,直到被别处捕获(例如,显示错误框的默认异常处理程序)。

答案 1 :(得分:1)

有几点需要指出。正如其他答案/评论所解释的那样,您应该将代码包装在try..except块而不是try..finally块中。我不理解您的代码示例应该如何工作,因为正如当前编写的那样,您的消息将始终显示,是否存在异常。它应该看起来更像......

try
  arqTXT.LoadFromFile(LogPath);
except
  on E: EInOutError do begin
    ShowMessage('The log file could not be found. Check if the service is running. Message: '
      + E.Message);
  end
end;

该代码将捕获并处理I / O异常。您将使用不同的异常类型而不是EInOutError来处理不同类型的异常,或者脏的方法是使用on E: Exception来捕获所有类型。您还可以使用GetLastError识别特定的错误代码,并进一步识别/记录此错误代码,以确切地知道错误(文件丢失,只读等),假设发生了I / O异常。 / p>

Here's a good article explaining how to handle exceptions in Delphi.

要指出的另一件事是当你看到异常时。当您处于调试模式(从IDE运行应用程序)时,它将默认显示所有异常,甚至是您的应用程序独立运行时未看到的异常。 You can disable this in the IDE。那篇文章适用于Delphi 2007,但我很确定它也适用于2010,因为Delphi XE2中的选项相同。

答案 2 :(得分:-1)

使用

解决它
try

exception
on e: exception do
ShowMessage("My Message");

而不是尝试/最后。