Exceptions.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "Exceptions.h"
  5. #include "TextsCore.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. //---------------------------------------------------------------------------
  9. __fastcall ExtException::ExtException(Exception* E, AnsiString Msg):
  10. Exception(Msg)
  11. {
  12. AddMoreMessages(E);
  13. }
  14. //---------------------------------------------------------------------------
  15. __fastcall ExtException::ExtException(AnsiString Msg, Exception* E) :
  16. Exception("")
  17. {
  18. // "copy exception"
  19. AddMoreMessages(E);
  20. // and append message to the end to more messages
  21. if (!Msg.IsEmpty())
  22. {
  23. if (Message.IsEmpty())
  24. {
  25. Message = Msg;
  26. }
  27. else
  28. {
  29. if (FMoreMessages == NULL)
  30. {
  31. FMoreMessages = new TStringList();
  32. }
  33. FMoreMessages->Append(Msg);
  34. }
  35. }
  36. }
  37. //---------------------------------------------------------------------------
  38. __fastcall ExtException::ExtException(Exception* E, int Ident):
  39. Exception(Ident)
  40. {
  41. AddMoreMessages(E);
  42. }
  43. //---------------------------------------------------------------------------
  44. __fastcall ExtException::ExtException(AnsiString Msg, AnsiString MoreMessages) :
  45. Exception(Msg)
  46. {
  47. if (!MoreMessages.IsEmpty())
  48. {
  49. FMoreMessages = new TStringList();
  50. FMoreMessages->Text = MoreMessages;
  51. }
  52. }
  53. //---------------------------------------------------------------------------
  54. __fastcall ExtException::ExtException(AnsiString Msg, TStrings* MoreMessages,
  55. bool Own) :
  56. Exception(Msg)
  57. {
  58. if (Own)
  59. {
  60. FMoreMessages = MoreMessages;
  61. }
  62. else
  63. {
  64. FMoreMessages = new TStringList();
  65. FMoreMessages->Assign(MoreMessages);
  66. }
  67. }
  68. //---------------------------------------------------------------------------
  69. void __fastcall ExtException::AddMoreMessages(Exception* E)
  70. {
  71. if (E != NULL)
  72. {
  73. if (FMoreMessages == NULL)
  74. {
  75. FMoreMessages = new TStringList();
  76. }
  77. ExtException * ExtE = dynamic_cast<ExtException *>(E);
  78. if ((ExtE != NULL) &&
  79. (ExtE->MoreMessages != NULL))
  80. {
  81. FMoreMessages->Assign(ExtE->MoreMessages);
  82. }
  83. AnsiString Msg;
  84. if (dynamic_cast<EAccessViolation*>(E) != NULL)
  85. {
  86. Msg = LoadStr(ACCESS_VIOLATION_ERROR);
  87. }
  88. else if (!E->Message.IsEmpty() && (dynamic_cast<EAbort *>(E) == NULL))
  89. {
  90. Msg = E->Message;
  91. }
  92. // new exception does not have own message, this is in fact duplication of
  93. // the exception data, but the exception class may being changed
  94. if (Message.IsEmpty())
  95. {
  96. Message = Msg;
  97. }
  98. else if (!Msg.IsEmpty())
  99. {
  100. FMoreMessages->Insert(0, Msg);
  101. }
  102. if (FMoreMessages->Count == 0)
  103. {
  104. delete FMoreMessages;
  105. FMoreMessages = NULL;
  106. }
  107. }
  108. }
  109. //---------------------------------------------------------------------------
  110. __fastcall ExtException::~ExtException()
  111. {
  112. delete FMoreMessages;
  113. }