Schumi |
Отправлено: 06.11.2003, 12:34 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
У меня в проге куча try...catch.В основном,когда работаю с файлами.
Всё нормально.
Дело в том,что периодически прога отдаётся в работу.И,конечно,выскакивают глюки: выдаются сообщения на англ,типа ошибка по адресу такому и т.д.
Хотелось бы сделать так,чтобы я перехватывал эти сообщения,и выдавал своё сообщение,что типа обратитесь к разработчику.Но сделать это надо так,чтобы это не сказалось на работе уже имеющихся исключений.
Подмогите,как сделать.
|
|
Asher |
Отправлено: 06.11.2003, 13:17 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Однако
Люди — вы хоть в исходники собственных прог смотрите?
или только в дизайнере форм сидите?
За тебя уже все сделанно: В главном модуле программы
CODE |
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TfrmMain), &frmMain);
...
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
|
Вместо Application->ShowException(&exception);
пиши свой MessageBox
|
|
Schumi |
Отправлено: 08.11.2003, 16:57 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Пытался,ни в какую.
Даже туда не обращается
|
|
Георгий |
Отправлено: 08.11.2003, 20:08 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Может это какой-нибудь компонент так свои исключения обрабатывает?
Локализовать место появления исключения не пробовали? |
|
John |
Отправлено: 08.11.2003, 20:21 |
|
Не зарегистрирован
|
Я делаю так:
1. В конструкторе главной форма первой строчкой пишу:
Application->OnException = MyException;
2. Пищу функцию
void __fastcall TMain::MyException(TObject *Sender, Exception *E)
{
AnsiString s;
char *s1, *ss,
*s2 = "Cannot insert duplicate key"; // Часть английского сообщения
.........
s = E->Message;
s1 = s.c_str();
if (strstr(s1, s2) != NULL) {
Application->MessageBox("Русский перевод", "Ошибка", MB_OK);
if (strstr(s1, s3) != NULL) {
Application->MessageBox("......", "Ошибка", MB_OK);
..................
} else {
Application->MessageBox("Неизвестная ошибка", "Ошибка", MB_OK);
} // else
}
3. Где надо прототип.
|
|
vavone |
Отправлено: 19.11.2003, 15:21 |
|
Не зарегистрирован
|
С этими исключениями беда какая-то.
Лично у меня не работает след. код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDateTime TempDate;
try
{
TempDate = StrToDateTime("99.99.1998");
}
catch (const EConvertError &E)
{
ShowMessage(AnsiString(E.ClassName()) + "\n" + AnsiString(E.Message));
}
}
На ShowMessage не попадаю.
И кто подскажет, в чем дело?? |
|
Asher |
Отправлено: 19.11.2003, 17:12 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
To vavone:
проверил приведенный код — все работает. Только warning выдает на const перед EConvertError. Лучше бы убрать
Стоит проверить разрешена ли остановка на Language Exeption
Отредактировано Asher — 19/11/2003, 19:15
|
|