Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.31;
Скачать: CL | DM;

Вниз

Обработка ошибок   Найти похожие ветки 

 
sapsi   (2003-03-19 09:03) [0]

ДОбрый день
Как обработать любую ошибку на уровне приложения?
При возниконовении любой ошибки перезапустить программу.
Программа состояит из одной формы, есть коннекты к базам, преобразование строк и т.п.
В случае ошибки можно, например, сделать Destroy формы и снова create?
Подскажите, как лучше.
Спасибо.


 
Юрий Зотов ©   (2003-03-19 09:12) [1]

Смотря, что понимается под перезапуском. Если в буквальном смысле, то, например, можно подправить DPR:

uses
..., Windows;

begin
try
... // Весь стандартный текст
except
... // Запуск собственного EXE
raise
end
end.


 
sapsi   (2003-03-19 09:27) [2]

а первый экземпляр программы останется в памяти при этом?


 
Smithson ©   (2003-03-19 09:56) [3]

А то! Но при значительной ошибке виндоус как правило либо молча убивает приложение, либо выводит долгие предложения пользователю закрыть этут балалайку (зависит от настроек).


 
sapsi   (2003-03-19 10:06) [4]

Допустим, в form1 при каком-то событии есть деление на нуль.
Если в dpr написать что-то вроде
try
Application.Initialize;
Application.CreateForm(Tform, form1);
Application.Run;
except
begin
form1.Destroy;
Application.CreateForm(Tform, form1);
end;
То будет ли этот код перехватывать ошибки - думаю нет.
Что нужно сделать, чтоб все ошибки отловить?


 
Лёшик   (2003-03-19 10:19) [5]

Это можно здалав так в dpr пишем

type
TExceptClass=class
public
procedure GlobalException(Sender: TObject; E:Exception);
end;
procedure TExceptClass.GlobalException(Sender: TObject; E:Exception);
begin
;//здесь можем запустить приладу и зделать Halt;
end;
begin
With TExceptClass.Create do begin
Application.OnException:=GlobalException;
Application.Initialize;
...
end.

точно не помню может быть ещё надо будет в uses добавить Forms, Windows. должно всё работать если что обращайся :)


 
REA ©   (2003-03-19 10:29) [6]

InterbaseGuardian :) Повесить вторую программу, которая будет запускать первую. Ну а первая вторую...


 
AlexVit ©   (2003-03-19 12:31) [7]

Я делал так и это работает:
procedure TForm1.FormCreate(Sender: TObject);
begin
//...
Application.OnException := AppException;
//...
end;

procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
//...
Application.Terminate;
ShellExecute(0, "open", "путь к проге и ее имя", nil, nil, SW_SHOWDEFAULT) // снова запускаем прогу;
//...
end;

Т.е. прога сама себя перезапускает, если возникла ошибка.




Страницы: 1 вся ветка

Текущий архив: 2003.03.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-100207
Саня
2003-03-20 09:31
2003.03.31
Не могу передать в процедуру параметр типа массив


14-100438
grrey
2003-03-13 15:13
2003.03.31
Вопрос. Как у программеров с памятью?


4-100504
Antosya
2003-01-27 14:48
2003.03.31
Как мне словить надатие комбинации клавиш?


7-100477
BJValentine
2003-02-04 16:55
2003.03.31
События Windows


1-100329
Bosh
2003-03-20 03:43
2003.03.31
SendMessage