Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];

Вниз

Перехват исключения при создании формы.   Найти похожие ветки 

 
Drowsy ©   (2011-06-26 05:11) [0]

type
 TfmTest = class(TForm)
  procedure FormCreate(Sender: TObject);
end;
var fmTest : TfmTest;

implementation
procedure TfmCrush.FormCreate(Sender: TObject);
begin
  try  
....
==>>здесь Exception
...
 except
   ....
   Raise;
 end;
end;
-------
procedure MainForm.TestCreateOnClick(Sender : TObject)
begin
   inherited;

  try
    if not Assigned fmTest then
    begin
       try
          fmTest := TfmTest .Create(Application);
       except
==> сюда Except не приходит, а сразу в Application.OnException
           fmTest .Release;
           fmTest  := nil;
       end;
    end;
==> после Application.OnException продолжает выполняться.  
    with fmTest  do
    begin
        ShowModal;

        Release;
        fmTest  := nil;
    end;
 
 except
==> сюда не Except тоже, конечно, не приходит,
   if Assigned (fmTest  ) then
     begin
         Release;
         fmTest := nil;
     end;
 end;

end;

1)Получается, что если ошибка возникла в OnCreate формы, то форма (указатель на неё) уже создана и прехватить ошибку в блоке try create except end "напрямую" нельзя?!
2)Если в Application.OnException Написать Raise E; , то вызывается деструктор формы и надо так?
      try
          fmTest := TfmTest .Create(Application);
       except
==>  в Application.OnException, где Raise E
          if Assigned(   fmTest ) then  
           begin
              fmTest .Release;
              fmTest  := nil;
           end;
      end;
     
      if Assigned(   fmTest ) then
.....
3)Как правильно обрабатывать такие ошибки?


 
Leonid Troyanovsky ©   (2011-06-26 10:08) [1]


> Drowsy ©   (26.06.11 05:11)

http://delphimaster.net/view/2-1308799300/

--
Regards, LVT.


 
Drowsy ©   (2011-06-26 12:39) [2]

Спасибо, Леонид!


 
petvv   (2011-06-30 11:57) [3]

Тебя уже посылали в мою ветку. Ну всё же отвечу, что у себя сделал так:

Есть главная форма при её создании объявляю:

Application.onException:=HandleException;
...

procedure TfMain.HandleException(Sender: TObject; E: Exception);
var
 EE: EDBEngineError;
begin
 if E is EDBEngineError then
   begin
     ShowError(EE);
   end;
end;

procedure TfMain.ShowError(AExc: EDBEngineError);
begin
 GetErrText(AExc.Errors[AExc.ErrorCount-1].ErrorCode);
 MessageDlg(GetErrText(AExc.Errors[AExc.ErrorCount-1].ErrorCode)+#13#10+
 AExc.Errors[AExc.ErrorCount-1].Message,mtWarning, [mbOK], 0);
end;


На главной форме есть меню из которого запускаются другие формы
При нажатии на меню выполняется следующий код

procedure TfMain.ShowATPClick(Sender: TObject);
begin
 //Выводим форму для просмотра
edKard:=False;
 with TfseATP.Create(Application) do
 try
   //  до появления
   ShowModal;
   //  после закрытия
 finally
   Free;
 end;{try}
end;


А в вызываемой форме в моём случае fseATP нужно всего лишь переопределить функцию HandleCreateException

Само определение  

private
   { Private declarations }
   function HandleCreateException: Boolean; override;


и сама реализация
function TfseATP.HandleCreateException: Boolean;
begin
  Result := False;
end;


 
Игорь Шевченко ©   (2011-06-30 12:22) [4]


> procedure TfMain.HandleException(Sender: TObject; E: Exception);
>
> var
>  EE: EDBEngineError;
> begin
>  if E is EDBEngineError then
>    begin
>      ShowError(EE);
>    end;
> end;


Удивительное рядом



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

Форум: "Начинающим";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1308725956
SQLEXPRESS
2011-06-22 10:59
2011.10.16
декомпилировать приложение C#


2-1309050691
Drowsy
2011-06-26 05:11
2011.10.16
Перехват исключения при создании формы.


2-1309021069
Weei
2011-06-25 20:57
2011.10.16
Передача первой подрограммы во 2ю в качестве параметра


8-1217186194
Алекс
2008-07-27 23:16
2011.10.16
Проблема с отрисовкой Image.


2-1309343844
bon
2011-06-29 14:37
2011.10.16
delphi & c#





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский