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

Вниз

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

 
GuAV ©   (2005-02-02 21:56) [0]

Такой вот код:
 try
   Form1 := TForm1.Create(nil);
 except
   on E: Exception do
   begin
     Application.ShowException(E);
     Result := 1;
     Exit;
   end;
 end;

Однако, при возникновении исключения форма всё равно создаётся и код в ехсерт не выполняется.

Можно ли как-нибудь выключить эту фичу ?

Эта особенность распространяется тоько на конструкторы форм или ещё на что-то ?


 
Anatoly Podgoretsky ©   (2005-02-02 23:40) [1]

Погашено в OnCreate И так делать не надо
Form1 := TForm1.Create(nil);
try
except
  on E: Exception do
  begin
    Application.ShowException(E);
    Result := 1;
    Exit;
  end;
end;


 
jack128 ©   (2005-02-03 00:03) [2]

GuAV ©   (02.02.05 21:56)
Однако, при возникновении исключения форма всё равно создаётся и код в ехсерт не выполняется.

Где именно исключение возникает? Если в событии OnCreate, то в пятерке эту фитчу нельзя отключить..Выше не знаю..

procedure TCustomForm.DoCreate;
begin
 if Assigned(FOnCreate) then
 try
   FOnCreate(Self);
 except
   Application.HandleException(Self);
 end;
 if fsVisible in FFormState then Visible := True;
end;


 
GuAV ©   (2005-02-03 00:26) [3]

jack128 ©   (03.02.05 0:03) [2]

Да, в OnCreate.
Спасибо. Не сообразил про Ctrl+Click

procedure TCustomForm.DoCreate;
begin
 if Assigned(FOnCreate) then
 try
   FOnCreate(Self);
 except
   if not HandleCreateException then
     raise;
 end;
 if fsVisible in FFormState then Visible := True;
end;

function TCustomForm.HandleCreateException: Boolean;
begin
 Application.HandleException(Self);
 Result := True;
end;

HandleCreateException - динамический метод, поэтому что делать - теперь понятно.

Anatoly Podgoretsky ©   (02.02.05 23:40) [1]

> И так делать не надо

Почему ?
Мне нужно в Result иметь 1 если получилось исключение, а исключения "выпускать" из dll не нужно. Причём не важно в OnCreate искл-е или где ещё.


 
Anatoly Podgoretsky ©   (2005-02-03 00:38) [4]

Ну если нужно, то другое дело, но вот пример глушения исключения приведен.


 
GuAV ©   (2005-02-03 00:43) [5]

Пришлось написать так, чтобы форма освобождалась:
 try
   Application.CreateForm(TForm1, Form1)
 except
   on E: Exception do
   begin
     Application.ShowException(E);
     Form1.Free;
     Result := False;
     Exit;
   end;
 end;


> Ну если нужно, то другое дело, но вот пример глушения
> исключения приведен.

Не понял.


 
Anatoly Podgoretsky ©   (2005-02-03 00:52) [6]

Вот погашеное
except
  Application.HandleException(Self);
end;


А вот повторно возбужденное
except
  if not HandleCreateException then
    raise;
end;


 
GuAV ©   (2005-02-03 01:18) [7]

Так получается, что приложение использующее эту dll неадекватно реагирует на исключения - оно считает вызов функции успешным в случае исключения.

Кстати, такой вопрос:
Если в DLL на Delphi возникает исключение, то можно ли его вообще "выпускать" из DLL ? Понятно, что текст исключения не-Delphi приложение не покажет. Но не приведёт ли неожиданное искючение к нарушению работы программы ?


 
Petr V. Abramov ©   (2005-02-03 04:02) [8]

> Если в DLL на Delphi возникает исключение, то можно ли его вообще "выпускать" из DLL ?
 Если build with Runtime packeges - можно. Если нет - точно не нужно.


 
jack128 ©   (2005-02-03 06:08) [9]

Ну вот такой код к краху приложения не приводит

library MyDll;

uses
 SysUtils,
 Classes;

{$R *.RES}

function TestException: Integer; safecall; export;
begin
 raise Exception.Create("Test");
 Result := -1
end;

exports
 TestException;

begin
end.

program MyApp;
{$APPTYPE CONSOLE}
uses
 SysUtils;

function Test: Integer; safecall; external "MyDll.dll" name "TestException";

begin
 try
   test
  except
    on E: Exception do
      WriteLn(E.Message);
  end;
  ReadLn;
end.



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

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

Наверх




Память: 0.47 MB
Время: 0.039 c
14-1106724470
NewDelpher
2005-01-26 10:27
2005.02.20
Отношение к русским за границей


3-1106570122
Russko
2005-01-24 15:35
2005.02.20
Запрос Update


14-1107266227
AlexG
2005-02-01 16:57
2005.02.20
Что мне добавить и нравится ли структура?


1-1107720491
Layner
2005-02-06 23:08
2005.02.20
Здравствуйте! Посоветуйте плз, как так можно сделать,


4-1104318307
Pavlik_Morozov
2004-12-29 14:05
2005.02.20
Как вызвать DPtoLP для точек из метафайла (TMetaFile)?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский