Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка ошибки! try...except 
:(
    Опции темы
Susel
  Дата 13.1.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Есть 2-а собственных компонента TMyPanel и TMyExtLookupEdit - наследники TPanel и TdxInplaceExtLookupEdit соответственно.
TMyPanel - связанные панели, т.е. есть ссылка (свойство такого же типа TMyPanel) на предыдущую панель PrevPanel и на следующую NextPanel.

Для TMyPanel определена процедура:
Код

    procedure CMVisibleChanged(var Message: TMessage);message CM_VISIBLECHANGED;
    ...
      if Visible and Assigned(FPrevPanel) then
        FPrevPanel.Enabled:=false; 
    ....


Для TMyExtLookupEdit переопределена процедура DoExit таким образом, что в случае неверного ввода генерируется ошибка:
Код
 raise Exception.Create... 


Есть форма содержащая MyPanel1 и MyPanel2. MyPanel1 содержит MyExtLookupEdit1. Форма имеет следующий код:
Код

      try
        curPanel.ShowNext;
      except
        curPanel.HideNext;
        raise;
      end;


ShowNext и HideNext равносильны curPanel.NextPanel.Visible:=true и curPanel.NextPanel.Visible:=false соответственно.

Проблема в том, что при возникновении ошибки (введено неверное значение в MyExtLookupEdit1) ошибка генерируется и сообщение об ошибке появляется, но управление не передается в блок except и следующая панель остается видимой.
PM MAIL   Вверх
_hunter
Дата 13.1.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



значит исключение бросает не curPanel.ShowNext


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Susel
Дата 13.1.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



В режиме трассировки ставлю точку остановки на curPanel.ShowNext в блоке try, нажимаю F8 - получаю ошибку, но управление блоку except не передается.... smile
PM MAIL   Вверх
Alexeis
Дата 13.1.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



В режиме трасировки и при запуске из delpi исключения вызываются всегда - это не значит что програма работает с ошибками.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Susel
Дата 13.1.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



alexeis1
Чёт не понял к чему это!?
При запуске exe - ошибка также успешно генерируется, но следующая панель не исчезает!

Это сообщение отредактировал(а) Susel - 13.1.2006, 17:44
PM MAIL   Вверх
ShadeSt
Дата 13.1.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: нет
Всего: 7



может быть такое что ты уже обрабатываешь эту ошибку..
Код

Procedure DoSome;
Begin
  Try
     что то с ошибкой
  Except
  End;
End;


Procedure ShowNext
Begin
  Try
    DoSome
  Except
    ShowMessage(...);
  End
End;


Получается что у тебя есть ошибка при вызове DoSome, но в процедуре ShowNext ты не попадешь в блок Except.


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
Susel
Дата 13.1.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



ShadeSt
Проверял, нет такого.....
Да и как правило, если обрабатываю ошибки - ставлю raise, т.е. не подавляю сообщение об ошибке, как в твоем примере...
PM MAIL   Вверх
_hunter
Дата 13.1.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Цитата(Susel @ 13.1.2006, 16:23 Найти цитируемый пост)

но управление блоку except не передается

а куда передается?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ShadeSt
Дата 13.1.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: нет
Всего: 7



Тогда интересно в обработчике какого события ошибка и где ты ее потом хочешь поймать?
Вне этого обработчика что ли?



--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
Susel
Дата 13.1.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



_hunter
Передается следующей за блоком try...except инструкции.......
PM MAIL   Вверх
ShadeSt
Дата 13.1.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: нет
Всего: 7



Код

      try    
        curPanel.ShowNext;    
      except    
        curPanel.HideNext;    
        raise;    
      end;


Если ты хочешь поймать тут ошибку, то надо чтобы она была в процедуре ShowNext.
А исключение при неверном вводе, у тебя где?? в TEdit.OnExit?

Это сообщение отредактировал(а) ShadeSt - 13.1.2006, 18:09


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
_hunter
Дата 13.1.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



создай тестовый проект в котором просто кинь исключение и попробуй его поймать.
потом перенеси код в этот проект -- посмотри что будет.
может ты обработку исключений отключил...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Susel
Дата 13.1.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Да, исключение можно сказать в OnExit (на самом деле в DoExit), но DoExit фактически вызывается в ShowNext, хотя и через сообщение винды......
Добавлено @ 18:34
_hunter
В блоке try сгенерировал деление на 0 - except отработал, однако если деление на ноль генерирую в DoExit - управление блоку except не передается......
PM MAIL   Вверх
_hunter
Дата 13.1.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



значит где-то в ShowNext стоит свой обработчик.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Susel
Дата 13.1.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Ну нет там обработчика....нет..... smile
Добавлено @ 19:16
Приведу больше кода:

Код

procedure TTrxSQLPanel.ShowNext;
begin
  if NextPanel<>nil then
    NextPanel.Show;
end;


Код

procedure TTrxSQLPanel.CMVisibleChanged(var Message: TMessage); \\Обработчик сообщения CM_VISIBLECHANGED
begin
... \\никаких обработчиков ошибок тут тоже нет
  if Visible then
  begin
  ...
        FPrevPanel.Enabled:=false;
        GetFirstCanFocus.SetFocus;
  ...
  end
...
end;



Код

procedure TTrxOraCustomExtLookupEdit.DoExit;
begin
...
        raise Exception.Create('Ошибка!');
...
  inherited;
end;

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0885 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.