Изменить сообщение об исключении в Lazarus

Каждый раз, когда я использую raise Exception.create('...');, он показывает, в отличие от Delphi, следующее поле:

[my message]

Press OK to ignore and risk data corruption.
Press Cancel to kill the program.

Я просто хочу изменить это сообщение по умолчанию и оставить только свою часть.

Кто-нибудь знает, как я могу это сделать?


person felipe.zkn    schedule 04.06.2013    source источник
comment
Вы можете назначить свой собственный метод Application.OnException,.. или обработать исключение, если это возможно... Не знаю, есть ли другой способ.   -  person Sertac Akyuz    schedule 04.06.2013
comment
@SertacAkyuz Можете ли вы показать мне пример? Когда я пытаюсь связать обработчик с моим application.onException, Lazarus пытается вызвать функцию и выдает ошибку.   -  person felipe.zkn    schedule 04.06.2013
comment
Пусть procedure OnExcept(Sender : TObject; E : Exception); — это метод класса, например TForm1. Тогда вы можете написать Application.OnException := OnExcept;   -  person Sertac Akyuz    schedule 04.06.2013
comment
@SertacAkyuz Это очень странно. Я делал то же самое, что ты сказал. Но Lazarus выдает ошибку: Неверное количество параметров указано для вызова OnExcept. И я сделал это и с частными объявлениями: ---------------------------------- procedure onExcept(sender: TObject; e : Исключение); ------------------- процедура TfrmMain.formCreate(sender: TObject); начать application.onException := onExcept; конец; ------------------- процедура TfrmMain.onExcept(sender: TObject; e: Exception); начало //... конец;   -  person felipe.zkn    schedule 04.06.2013
comment
Я только что сделал: @onExcept; и он скомпилирован. Согласно документации Lazarus: пользователи Delphi часто путают это, потому что Delphi позволяет это и добавляет @ внутри. Если вы предпочитаете синтаксис Delphi, вы можете использовать {$mode Delphi} вместо {$mode ObjFPC}.   -  person felipe.zkn    schedule 04.06.2013
comment
@SertacAkyuz, если хочешь, можешь ответить на вопрос.   -  person felipe.zkn    schedule 04.06.2013
comment
Пожалуйста :), если бы я ответил, я бы даже не упоминал об адресном операторе.   -  person Sertac Akyuz    schedule 04.06.2013
comment
@SertacAkyuz Заслуга твоя! Спасибо за помощь в решении.   -  person felipe.zkn    schedule 04.06.2013


Ответы (1)


Чтобы настроить собственное сообщение об исключении, я сделал следующее:

В частных объявлениях основной формы приложения:

procedure onExcept(sender: TObject; e: Exception);

В событии OnCreate основной формы:

procedure TfrmMain.formCreate(sender: TObject);
begin
    application.onException := @onExcept;
end;

procedure TfrmMain.onExcept(sender: TObject; e: Exception);
begin
    //...
end;

Важно отметить, что оператор @ необходим, если вы используете Lazarus. Если бы я его не поставил, компилятор счел бы onExcept вызовом функции. Delphi добавляет его внутри, поэтому вам не нужно об этом беспокоиться.

Если вы хотите изменить это поведение, используйте директиву {$mode Delphi} вместо {$mode ObjFPC}.

person felipe.zkn    schedule 05.06.2013