Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2016, 17:29   #1
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию Сохранение текста ошибки в блокноте

Приветствую, товарищи!
Подскажите, можно ли это как-нибудь сделать?
Спасибо.
Ernest027 вне форума Ответить с цитированием
Старый 26.02.2016, 17:34   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Какой именно ошибки?
Что значит "в блокноте"?
Вы в своей программе хотите сохранить какой-то текст?
Для этого можно записать нужную информацию в текстовый файл.
если я Вас правильно понял, конечно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.02.2016, 19:23   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Ernest027 Посмотреть сообщение
Сохранение текста ошибки в блокноте
Подскажите, можно ли это как-нибудь сделать?
Спасибо.
Запросто
Например:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c: extended;
begin
a:=3;
b:=0;
try
c:=a/b;
except
  on E: Exception do
  ListBox1.Items.Add('Точка проверки №1 '+DateTimeToStr(Now)+' '+E.Message);
  //вместо стандартного текста ошибки E.Message можете написать свое сообщение на русском языке
  //  ShowMessage(E.Message); // это тоже можно делать для информирования юзера
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var wnd: HWND;
begin
ListBox1.Items.SaveToFile('C:\errors.txt');
wnd := FindWindow('notepad', nil);
ShellExecute(wnd, nil, 'C:\errors.txt', nil, nil, sw_shownormal);
end;
Или вас интересует прямая передача в открытое окно "Блокнота" по мере обнаружения ошибок?

Последний раз редактировалось kropotkina-alice; 26.02.2016 в 19:34.
kropotkina-alice вне форума Ответить с цитированием
Старый 26.02.2016, 21:16   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Думаю, надо было начать с самого простого. Скопировать текст можно, нажав CTRL+C (окно с сообщением должно быть активным, фокус на нём должен быть).
_____

Итак, я попытался в делфи получить квадратный корень от минус единицы, получил Access Violation:
exeption.jpg
Нажал CTRL+C и получил вот что:
Цитата:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EInvalidOp with message 'Invalid floating point operation'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Вадим Мошев вне форума Ответить с цитированием
Старый 26.02.2016, 21:23   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

316.png
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.02.2016, 21:58   #6
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Думаю, надо было начать с самого простого. Скопировать текст можно, нажав CTRL+C (окно с сообщением должно быть активным, фокус на нём должен быть).
_____

Итак, я попытался в делфи получить квадратный корень от минус единицы, получил Access Violation:
Вложение 79857
Нажал CTRL+C и получил вот что:
А если запускать не в среде дельфи?
kropotkina-alice вне форума Ответить с цитированием
Старый 26.02.2016, 22:27   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
А если запускать не в среде дельфи?
Приготовил скринкаст для вас. Вы об этом?
https://youtu.be/eZwWWcGxPWA



Там поставьте качество 720p

Последний раз редактировалось Вадим Мошев; 26.02.2016 в 22:34.
Вадим Мошев вне форума Ответить с цитированием
Старый 26.02.2016, 23:57   #8
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 161
По умолчанию

Экстрасенс из меня конечно фиговый, но это нужно чтобы вести лог ошибок?
Тогда можно воспользоваться свойством OnException у TApplication, только стоит помнить что оно глобально и при его использовании необходимо показывать ошибки своими силами.
К примеру в public главной формы допишем такую процедуру:
Код:
  public
{ Public declarations }
procedure myexcept(Sender: TObject; E: Exception);
сама процедура:
Код:
procedure TFrmMain.myexcept(Sender: TObject; E: Exception);
var ef:textfile;
begin
//cначала пишем ошибку в лог
AssignFile(ef,'Errors.log');
if FileExists('Errors.log') then
 System.Append(ef) else System.Rewrite(ef);
 writeln(ef,'');
 write(ef,'Sender: ['+sender.ClassName+'] Classname:'+e.ClassName +' | Message: '+ e.Message+ ' Stack: ['+e.StackTrace+'] ');
 CloseFile(ef);
 // затем показываем своё сообщение об ошибке
  winapi.Windows.MessageBox(0,PChar(e.ClassName+' : '+e.Message),pchar('Error!'),MB_ICONERROR);
end;
и к примеру после инициализации в файле проекта присвоим нашу процедуру (не забыть добавить Sysutils в Uses):
Код:
  Application.Initialize;
  Application.OnException:=TFrmMain.myexcept;
В итоге все ошибки будут сохранятся в файле Errors.log
к примеру запись от AV будет выглядеть так:
Код:
Sender: [TFrmMain] Classname:EAccessViolation | MessageAccess violation at address 005C6C24 in module 'Project1.exe'. Read of address 00000000 Stack: []
DIONISKA вне форума Ответить с цитированием
Старый 27.02.2016, 00:28   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от DIONISKA Посмотреть сообщение
Тогда можно воспользоваться свойством OnException у TApplication, только стоит помнить что оно глобально и при его использовании необходимо показывать ошибки своими силами.
Достаточно в конце обработчика OnException написать
Код:
Application.ShowException;
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранение текста из richTextBox TaTT DoGG Общие вопросы .NET 2 24.06.2016 17:24
Ошибки при передаче текста в класс, выводе текста yuracr9 Visual C++ 0 14.04.2015 21:33
сохранение текста из мемо BESS Компоненты Delphi 14 05.03.2012 15:26
сохранение текста в файл!!! AK BULLETS Общие вопросы Delphi 2 19.03.2010 13:23
редактирование текста в блокноте. Kio Помощь студентам 16 21.07.2008 17:02