Exception TTaskDialog

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Exception TTaskDialog

Сообщение kit »

Как сделать обработчик ошибок с формой TTaskDialog, типа:
try
...
except
raise TTaskDialog.Create
end;
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Код: Выделить всё

  try
    //raise TTaskDialog.Create;
    raise Exception.CreateFmt('Недопустимое название : ''%s''', [name]);
  except
    on e:exception do
    ShowMessage(e.Message);
  end;
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

Хочу что б можна било посмотреть детали ошибки при нажатии кнопки TaskDialogButton
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Код: Выделить всё

  try
    TaskDialog := TTaskDialog.Create;

// ...

  except
    on e:exception do
    ShowMessage(e.Message);
  end;
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Проблема в получении "деталей" ошибки или создании окна?
Вообщета создавать сложные окна при ошибке не есть хорошо.
kit
постоялец
Сообщения: 156
Зарегистрирован: 29.09.2016 08:39:07

Сообщение kit »

zub писал(а):Проблема в получении "деталей" ошибки или создании окна?
Вообщета создавать сложные окна при ошибке не есть хорошо.

детали ошибки мои. хочу сложное окно ошибки вместо стандартного
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

kit, а в чем проблема? Создай динамическое окно там же. Другое дело, что если дом рушится, то поздно обои клеить и в случае действительно серьезной ошибки обработчик может захлебнуться.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Код: Выделить всё

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    FAppProps:TApplicationProperties;

    procedure _onCreateHandler(Sender: TObject);
    procedure ExceptionHandler(Sender: TObject; E: Exception);

  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
procedure GetAV;
begin
  pinteger(0)^:=100;
end;

procedure TForm1.ExceptionHandler(Sender: TObject; E: Exception);
var
  errformm:TTaskDialog;
begin
  errformm:=TTaskDialog.Create(nil);
  errformm.Caption:='haha!';
  errformm.Execute;
  errformm.Free;
end;

procedure TForm1._onCreateHandler(Sender: TObject);
begin
  FAppProps := TApplicationProperties.Create(Self);
  FAppProps.OnException := @ExceptionHandler;
  FAppProps.CaptureExceptions := True;

  GetAV;
end;

end.


TForm1._onCreateHandler повесить на TForm1.onCreate
Программа назначает свой обработчик необработаных исключений, в котором создает "сложное" левое окно и генерит исключение для "проверки"
При запуске под лазарем с отладчиком обработчик всеравно используется стандартный, поэтому либо запускать вне лазаря, либо в лазаре без отладчика.

Но это дурость, делать так ненадо
Ответить