![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ShowModal внутри try...except
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]
> На второй форме куча кнопок, при нажатии на каждую из которых
> может сгенериться необрабатываемое исключение.
фтопку такую форму,программу и програмиста