Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ShowModal внутри try...except


Страницы:   1 2

IGray ©   (2012-06-13 14:40:00) 

Здравствуйте! Есть простой код:

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
   Form2.Showmodal;
 except
   on E: Exception do
      ShowMessage(E.Message);
 end;
end;

На второй форме куча кнопок, при нажатии на каждую из которых может сгенериться необрабатываемое исключение.
Сейчас при этом вызывается дефолтный обработчик, форма остаётся открытой и except..end никогда не выполняется, а мне бы хотелось чтобы форма автоматически закрылась и возникшее исключение попало во внешний блок except..end
Это возможно как-нибудь организовать?
Заранее спасибо!
Сорри, если туплю..


Anatoly Podgoretsky   (2012-06-16 15:29:00) [1]

Ну разве что - убери внутри try except end или перепиши так что бы вылазило наружу.
А то что то много любителей такого кода.


Anatoly Podgoretsky   (2012-06-16 15:26:00) [2]

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


sniknik   (2012-06-16 15:03:00) [3]

> Очевидно, Вы очень круты, если в Вашем коде такое невозможно..
ты даже не представляешь насколько... и тем не менее, я просто нормальный программист.
кроме того не передергивай, не невозможно, а редко. я так сказал. и чаще всего ловится на этапе разработки/отладки.

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


Loginov Dmitry   (2012-06-16 15:03:00) [4]


> у нас программа отсылает ТОННУ всевозможной диагностической
> информации для воспроизведения и локализации ошибки.


Надеюсь, что никогда не придется встретиться со столь безбожно глюченным поделием.


> Кстати, для меня загадка, почему даже в крутых продуктах
> этого нельзя встретить..


Крутые продукты разрабатывают нормальные программисты, которые решают поставленные задачи, а не тратят время на ерунду.


IGray   (2012-06-16 14:45:00) [5]

О, это уже похоже на обсуждение, спс.
> > но ведь ведь чтобы исправить ошибку её сначала нужно увидеть,  так?
> не только,

Я имел в виду - как минимум.

> и логов с записью по действиям у тебя тоже нет
Хехе..) Даже не представляете, насколько Вы тут ошибаетесь - у нас программа отсылает ТОННУ всевозможной диагностической информации для воспроизведения и локализации ошибки. Я в жизни не встречал ни одной программы, которая хоть половину из этого  отсылала. Кстати, для меня загадка, почему даже в крутых продуктах этого нельзя встретить..
Дело в другом - до последнего времени наша прога в случае необрабатываемого исключения благополучно крэшилась с выводом культурного сообщения и отправкой диагностической информации, и завершалась без всяких попыток самовосстановления.
И это было правильно и нормально, и обычно никому ничего другого и не надо. Но теперь есть пожелание клиента, чтобы программа при выполнении некоторых действий не крэшилась, а перезагружала плагин и попыталась бежать дальше, так как высока вероятность, что ошибка не повторится.
Вероятно мало кому такое надо, потому и мало дельных ответов на мой вопрос..

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

> обработать, записать в лог с пояснением что/где делалось,
>  и если необходимо кинуть эксепт дальше.

Дык я об этом и спрашиваю - как именно правильнее кинуть эксепт дальше если он произошёл при выполнении ShowModal??Как в [1]?


robt   (2012-06-16 12:59:00) [6]


> IGray   (15.06.12 22:26) [8]

я не пользуюсь try\except вообще так же как и VCLом, если возникают ошибки-исправляю


sniknik   (2012-06-16 12:46:00) [7]

> какие баги могут вылезти из чужих компонентов и либ..
использование кривых чужих компонентов это тоже твой баг, не уверен, пиши его сам.


sniknik   (2012-06-16 12:44:00) [8]

> но ведь ведь чтобы исправить ошибку её сначала нужно увидеть, так?
не только, еще и нужно "место засечь", где произошла. при твоей же "схеме" юзер открывает окно, в нем другое, там еще какое то из ста возможных (утрированно), выполняет какое то действие с глючным участком кода... и пошла "обратная матрешка" вываливаемся из окна с ошибкой, после из его родителя (в нем же тоже глюк, внутренняя форма вылетела...) и т.д. откатываемся до главной и "формы вам все одно не нужны, была ошибка, скажите программисту где" ??? ответ клиента предсказуем как 2x2.
и логов с записью по действиям у тебя тоже нет... судя по возмущенному ->
> Глушить его дефолтным обработчиком каждой формы с выдачей сообщения пользователю и пусть потом пользователь сам закрывает форму?
а это как раз нормальная практика... только не "глушить", а обработать, записать в лог с пояснением что/где делалось, и если необходимо кинуть эксепт дальше.


IGray   (2012-06-16 12:07:00) [9]

> да, Access Violation это типовая ошибка кривого "программинга".
>  типовое решение - найти глюки в коде и исправить их.

Спасибо за ответ! Разумеется Вы правы, но ведь ведь чтобы исправить ошибку её сначала нужно увидеть, так? А если ошибка происходит при одном запуске из ста, то нельзя исключить, что её первым увидит пользователь. А значит её нужно грамотно обработать, отсюта и вопрос - как это сделать лучше..
Кроме того ведь неизвестно, какие баги могут вылезти из чужих компонентов и либ..


IGray   (2012-06-16 11:59:00) [10]

> Плохиш ©   (16.06.12 10:17) [15]
> вы с напарником относитесь к программированию как к волшебству

Как же любят некоторые заниматься психоанализомсобеседников на любых форумах, кроме, конечно, психологических - там слАбо?
Вообще, походу именно Вы относитесь к программированию как к волшебной палочке, которой нельзя ни с кем поделиться, но обязательно надо на каждом углу намекать, что она у Вас есть, а то вдруг никто не узнает, что Вы такой гениальный программист ;) Как тогда жить?
Я задал совершенно конкретный вопрос и не нужно, пожалуйста, тут метить территорию, если Вам нечего ответить "по существу". Может это Вам нужно нанять программиста, который отвечал бы на форумах вместо Вас? Или самому похамить охота? Я допускаю, что Вы разбираетесь в обработке исключений, но, очевидно, не настолько хорошо, чтобы попытаться ясно и чётко сформулировать ответ по теме. "Кто ясно мыслит - ясно излагает".
А ещё вероятнее, что ответа на данный вопрос у Вас просто нет, и Вас раздражает само существование таких вопросов, так как они мешают Вам себя идеализировать. Хотели психоанализа - получИте ;))

> Anatoly Podgoretsky ©   (16.06.12 08:32) [14]
> Хочешь узнать снаружи не держи в себе

Спасибо! Вы предлагаете передавать исключение "наверх" как в советах [1][2]?
А к вопросу об идеологии можете что-нибудь добавить?
Очень интересно Ваше мнение!


sniknik   (2012-06-16 11:39:00) [11]

> Просто данная проблема мне кажется типовОй, а значит у неё и решение должно быть типовое..
да, Access Violation это типовая ошибка кривого "программинга". типовое решение - найти глюки в коде и исправить их.
случается настолько редко (у нормальных программистов), что не нуждается в каких то дополнительных стандартных действиях устраняющих последствия. кроме выпуска исправленной версии программы, без бага.


Плохиш   (2012-06-16 10:17:00) [12]


> IGray   (16.06.12 03:07) [12]

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


Anatoly Podgoretsky   (2012-06-16 08:32:00) [13]


> а в том, что я хочу снаружи узнать, что внутри ShowModal
> произошла авария. Это странно?

Хочешь узнать снаружи не держи в себе


IGray   (2012-06-16 03:11:00) [14]

Просто данная проблема мне кажется типовОй, а значит у неё и решение должно быть типовое..


IGray   (2012-06-16 03:07:00) [15]

> А зачем обязательно нужно закрывать эту модальную форму
> при возникновении исключения?

Если произошло необработанное(т.е. непредвиденное)
исключение, то невозможно точно даже предсказать, что пользователь увидит на форме, какие кнопки будут активны, корректны ли графики, диаграммы и т.д. и т.п. Какой смысл держать такую (поломанную) форму открытой и заставлять пользователя с ней общаться? Может она настолько поломана, что он её даже закрыть не сможет.. Но суть даже не в закрытии, а в том, что я хочу снаружи узнать, что внутри ShowModal произошла авария. Это странно?

> Что это вообще за форма и что она делает?

А какая разница? Я же не про конкретную форму спрашиваю, а про борландовскую идеологию обработки исключений в ShowModal..
Но могу сказать, что форма активно взаимодействует с пользователем, на котором куча датчиков, пишет данные в файлы и буфера, одновременно строит графики.. Короче - это не банальное диалоговое окно с запросом ФИО и все ситуации не предскажешь.


Германн   (2012-06-16 00:52:00) [16]


> Глушить его дефолтным обработчиком каждой формы с выдачей
> сообщения пользователю и пусть потом пользователь сам закрывает
> форму?

А зачем обязательнонужно закрывать эту модальнуюформу при возникновении исключения? Что это вообще за форма и что она делает?


IGray   (2012-06-16 00:12:00) [17]

> Для этого, как правило, предусматривают кнопки "ОК" и "Отмена".
Ну, это если всё идёт хорошо - исключений нет, или есть только поправимые.. А что делать, если вылетело какое-нибудь непредусмотренное Access Violation? Глушить его дефолтным обработчиком каждой формы с выдачей сообщения пользователю и пусть потом пользователь сам закрывает форму? А разве не логично закрыть самостоятельно, не напрягая пользователя, раз уж форма всё равно непредсказуемо повреждена? А вдруг и кнопка "Закрыть" теперь откажет? А если ошибка произошла в OnActivate или OnShow?
Но ещё важнее другое.. Если я вызываю из одной процедуры другую, и по завершении выполнения вызванной хочу знать, были ли проблемы - это ведь нормально? А почему вызывая ShowModal я не имею право на это?
Спасибо за ответ!


Loginov Dmitry   (2012-06-15 23:30:00) [18]


> Я просто действительно хочу понять насколько нестандартным
> является моё желание и, соответственно, предложенное решение.
>


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


IGray   (2012-06-15 22:26:00) [19]

фтопку такую форму,программу и програмиста
фтопку балаболов ;)

Вы наверное такой крутой мастер, что дефолтный обработчик вообще не перекрываете, потому что прям все все все возможные исключения заранее предвидите и обрабатываете прям в той точке где они происходят ;)
Может тогда поделитесь опытом с неучами, а то мой начальник ща ваш пост прочитает и уволит меня заодно с напарником)))


robt   (2012-06-15 21:50:00) [20]


> На второй форме куча кнопок, при нажатии на каждую из которых
> может сгенериться необрабатываемое исключение.

фтопку такую форму,программу и програмиста


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо