![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выключаем обработчик ошибок.. [D5, D6, 95/98, ME, XP]
Dr.M@$ © (2007-05-22 10:19:00)День добрый многоуважаемые коллеги!
Праблема в следуйщем: мое приложение выкидывает иногда на передний план инфу об ошибке, (например "file nod found" или типа того ) нажимаю кнопку "OK" и работаю дальше....
вопрос: ка мне отключить эти ошибки, а точнее чтом приложение неостанавливало а например все ошибки посылало бы в какой нить лог файл??
Anatoly Podgoretsky (2007-05-22 19:22:00) [1]> Плохиш (22.05.2007 11:22:09) [9]
Но еще меньше нужна программа, которая прячет ошибки
Anatoly Podgoretsky (2007-05-22 19:21:00) [2]> ЮЮ (22.05.2007 10:46:04) [4]
Придется дважды проверять, один раз как ты рекомендуешь, а второй раз при открытии.
Dr.M@$ (2007-05-22 13:27:00) [3]....Ну вообщето я ошибку у себя откапал (даче 6 штук :) между каждой строчке гдн может быть ошибка вставил label. и выводил необходимый текст... вот так мы победили сырость :) ну а логи писать мне надо.... сейчас я этим займусь.. всем спасибо )
Плохиш (2007-05-22 11:51:00) [4]
> Dr.M@$ © (22.05.07 11:25) [10]
Программист преднозначен не только для того, чтобы натоптать какой-то код, но и для того, чтобы согласно логике программы обработать возможные исключения в момент их возникновения и сделать какую-то обработку, а для этого в делфи введена конструкцияtry ... except ... end, о использовании которой написано, имхо, в любой книге для чайников. Но поколение компутикос книгов/документации/справок не читает, они же не для них писаны, а для этих, которые здесь на вопросы отвечают...
GelVit (2007-05-22 11:39:00) [5]кидаешь на форму ApplicationEvents1 и в обработчике onException
procedure TForm.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var Filename: string;
LogFile: TextFile;
begin
{подготавливает файл журнала}
Filename:= ChangeFileExt(Application.ExeName, '.log');
AssignFile (LogFile, Filename);
if FileExists(Filename) then
Append(LogFile) {открыть сушествующий файл}
else Rewrite(LogFile); {cоздать новый файл}
{записать файл и показать ошибку}
writeln(LogFile, DateTimeToStr(Now)+ ':' + E.Message);
Application.ShowException(E);
CloseFile(LogFile); {закрыть файл}
end;
будет писать в лог
{RASkov} (2007-05-22 11:32:00) [6]> [6] Dr.M@$ © (22.05.07 11:10)
> лавить? тоесть узанть номер ошибки итп? а отключать?
А ты "нарисуй" обработчик и посмотри его параметр E: Exception...
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException:=Exc;
end;
procedure TForm1.Exc(Sender: TObject; E: Exception);
begin
ShowException(Sender, E);
end;
procedure TForm1.Button2Click(Sender: TObject);
var X,Y,Z: Integer;
begin
X:=10; Y:=0;
Z:=X div Y;
Caption:=IntToStr(Z);
end;
где Exc - описана методом формы
private
procedure Exc(Sender: TObject; E: Exception);
Кстати, если оставить все как есть, но просто закомментировать строку в Exc:
procedure TForm1.Exc(Sender: TObject; E: Exception);
begin
//ShowException(Sender, E);
end;
...то у тебя будут "гасится" все сообщения об VCL ошибках, что конечно не есть верно. Так как этот обработчик нужен именно для обработки исключений, а не их скрытие....
> [10] Dr.M@$ © (22.05.07 11:25)
Вот там же и в лог можно писать....
ЮЮ (2007-05-22 11:31:00) [7]> хотел чисто ловить и записывать все ошибки в лог файл
Нет, ты хотел "ка мне отключитьэти ошибки, а точнее чтом приложение неостанавливало". Отсюда и ответы такие :)
Dr.M@$ (2007-05-22 11:25:00) [8]:) ясно... хотел чисто ловить и записывать все ошибки в лог файл... а получил..... :(
Плохиш (2007-05-22 11:22:00) [9]
> Dr.M@$ © (22.05.07 11:11) [7]
> может есть какой нибдь чудо прификс отключающий ошибки
Есть, называется "программист". Вот на кой ляд нужна программа, которая работает с ошибками?
ЮЮ (2007-05-22 11:12:00) [10]> да про файл я для примера написал....
А я для примера ответил :) Будут конкретные примеры - заходи ещё.
P/S/ Ошибки надо исправлять в программе, а не подавлять сообщения о них.
Dr.M@$ (2007-05-22 11:11:00) [11]может есть какой нибдь чудо прификс отключающий ошибки например
{-I} ??? :)
Dr.M@$ (2007-05-22 11:10:00) [12]
> VCL'овские ошибки можно ловить на Application.OnException.
> ...
лавить? тоесть узанть номер ошибки итп? а отключать?
Dr.M@$ (2007-05-22 11:09:00) [13]да про файл я для примера написал....
ЮЮ (2007-05-22 10:46:00) [14]> нажимаю кнопку "OK" и работаю дальше....
Т.е. есть файл, нет файла - твоей программе пофиг? Она в обоих случаях работает правильно и одинаково? Ну-Ну :)
>(например "file nod found" или типа того )
Исключениz, которые можно избежать, лучше избегать. Чтобы не вываливалось "file nod found" никто не мешает проверить FileExists.
{RASkov} (2007-05-22 10:28:00) [15]> [2] Dr.M@$ © (22.05.07 10:23)
Ну сделать прогу так, чтоб их(ошибок) не было...
VCL'овские ошибки можно ловить на Application.OnException....
Dr.M@$ (2007-05-22 10:23:00) [16]ну может что то есть такое спещифическое?? мне просто часто выкидывает ошибки об scaneLine !!!
Сергей М. (2007-05-22 10:21:00) [17]
> ка мне отключить эти ошибки
В общем случае никак.
Ошибка ошибке рознь.