Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > где выполняется OnCreate


Автор: _hunter 15.9.2005, 11:31
добрый день.

заметил недавно такой прикол:
если кинуть исключение из конструктора:
Код

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;

  raise Exception.Create('');
end;

оно нормально поймается обработчиком проекта:
Код

begin
    try
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
  Application.Run;

      except
        Application.MessageBox('', 'exception');
    end;
end.

но если кинуть его из OnCreate:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
    raise Exception.Create('');
end;

оно пролетит мимо...

почему?
( по стеку вызовов и то и другое исключение кидаются из WinMain ( в данном случае из Project' a ) )

Автор: Rennigth 15.9.2005, 12:20
может потому что событие OnCreate вроде приходит отсюда:
Код

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;

а оно в трае.

Автор: _hunter 15.9.2005, 12:31
оригинально...
но не понятна эта:
Цитата
HandleCreateException forwards the exception on to the application object

строка. куда она его форвардит, если в обработчик это исключение не попадает?
+ вопрос можно немного модиффицировать: откуда вызывается AfterConstruction?..
++ вопрос с цитатой так и остался...

Автор: Rennigth 15.9.2005, 12:58
Debug dcu забыл включить, бывает...

Автор: Rennigth 15.9.2005, 13:11
afterconstruction вроде должен идти от самого TObject? надо посмотреть...

Автор: _hunter 15.9.2005, 13:18
угу. от него.
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)