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

Поиск:

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


Эксперт
****


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

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



так обработка сообщений идет в совсем другом контексте.
т.е. что происходит:
вызываем curPanel.ShowNext, она шлет сообщение, происходит выход из блока try ( потому как исключений нет ) курсор становится на строку за блоком и в это время сообщение доходит до адресата -- появляется исключение. ну а дальше все понятно smile



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


Новичок



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

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



_hunter
Т.е. исключение на ShowNext происходит только лишь в режиме трассировки!? На самом деле отрабатывают все инструкции после блока try...except, и только потом возникает ошибка!?
Добавлено @ 19:39
Где же её тогда перехватывать!?
PM MAIL   Вверх
_hunter
Дата 13.1.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



нет, в режиме "без отладки" это исключение тоже появится и тоже проскочи мимо.
ловить его нужно там, где оно бросается. т.е. на самом высоком уровне приемника сообщений.
в данном случае в CMVisibleChanged(


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


Новичок



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

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



Попробовал отловить в CMVisibleChanged - результат тот же.....при возникновении ошибки выполняется инструция следующая за блоком try...except... smile

Вот:
Код

procedure TTrxSQLPanel.CMVisibleChanged(var Message: TMessage);
begin
  try
  ...
          FPrevPanel.Enabled:=false;
  ...
  except
    raise;
  end;
  showmessage('Тест');
end;


Сначала появляется сообщение об ошибке, а затем появляется сообщение "Тест"...

Это сообщение отредактировал(а) Susel - 14.1.2006, 11:27
PM MAIL   Вверх
Alex
Дата 14.1.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Выложи здесть или пришли на почту, тестовый проект и свои компоненты


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


Новичок



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

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



Выкладываю тестовый пример с тестовыми компонентами. Расширение pas нужно изменить на rar.....

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Test.pas 4,56 Kb
PM MAIL   Вверх
Alex
Дата 15.1.2006, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Твое сообщение перехватывают в модуле Controls
Код

procedure TWinControl.MainWndProc(var Message: TMessage);
begin
  try
    try
      WindowProc(Message);
    finally
      FreeDeviceContexts;
      FreeMemoryContexts;
    end;
  except
    Application.HandleException(Self);
  end;
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Susel
Дата 16.1.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как же мне его отловить!?
PM MAIL   Вверх
_hunter
Дата 16.1.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



замени оконную процедуру...


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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Можно конечно и заменить оконную процедуру, но может стоит подумать "стоит ли игра свечь?" Может проще поделиться с людьми идеей, которую хочешь сделать и они предложат вариант при котором не нужно будет переписывать все компоненты, которые хочется положить на эту панель...


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


Новичок



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

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



Да идея то прозрачна из примера, на форме есть набор связанных панелей, которые должны появляться друг за другом по нажатию определённой клавиши, при этом предыдущая панель не должна быть доступна для редактирования. Есть комбобокс, на который вешается некоторое условие проверки (на основе информации из БД) и в случае неудовлетворительной проверки комбобокс не должен терять фокуса, т.е. из него не возможно выйти, а следовательно и следующая панель не должна появиться.

Вот в общем то в кратце и вся идея (правда кроме перечисленного и панель и комбобокс обладают ещё рядом дополнительных возможностей, не относящихся к вопросу)
PM MAIL   Вверх
Alex
Дата 16.1.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



По мне проще проверку качества заполнения данных вынести из компонентов и делать ее перед созданием новой панели. Или кто мешает Вызвать OnExit у компонентов до создания новой панели?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Susel
Дата 16.1.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

По мне проще проверку качества заполнения данных вынести из компонентов и делать ее перед созданием новой панели.


Дело в том, что проверка содержимого производится при помощи SQL запроса, в качестве параметра используюещего введённое значение. Причем запрос для проверки настраивается (хранится в одной из системных таблиц).

Цитата

Или кто мешает Вызвать OnExit у компонентов до создания новой панели?


События OnExit для компонентов могут быть и не определены, а проверку делать нужно.....
Допустим что вызвали OnExit для всех компонентов, но в случае ошибки как я понял опять же ошибка будет перехвачена оконной процедурой!
PM MAIL   Вверх
Susel
Дата 18.1.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неужели данную проблему таки можно решить, только переписав оконную процедуру!? smile
PM MAIL   Вверх
_hunter
Дата 18.1.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



учитывая что это проблема места обработки...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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