Урок Delphi 10Обработка исключительных ситуаций в Delphi |
Уроки Delphi
1. Первая программа
2. Использование компонентов
3. События Delphi
4. Типы данных Delphi
5. Создание своих типов данных
6. Выражения и операторы
7. Работа с файлами в Delphi
8. Дополнительные формы
9. Подпрограммы в Delphi
10. Исключительные ситуации
11. Взаимодействие приложения с пользователем
12. Указатели в Delphi
13. Обзор компонентов
14. Работа со строками
15. Создание интерфейса
16. Графика в Delphi
17. Многопоточность в Delphi
18. Динамическое создание
компонентов Поиск по сайту Это важно:
Метод Application.ProcessMessages;
Это полезно:
Параметр Sender в обработчиках событий;
Бояться не надо |
Исключительные ситуации в Delphi встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называется исключительной. Например, деление на ноль - классический пример исключительной ситуации. Создание подпрограмм в Delphi
В начало урока
Взаимодействие приложения с пользователем Вопросы и комментарии (15) Решение задач в Delphi
василий , добавлено 25.09.09, 01:45:18
Пасибо !!! хорощё что я вас нашел...=)не знаю как остальным но мне стало понятно и помогло! Владимир, добавлено 22.11.09, 10:13:54 Очень доступно и хорошо описано введение в программирование. Я за вечер во всем разобрался. И уже пару программок своих написал. Большое спасибо Вам. Елена, добавлено 1.12.09, 08:52:26 Спасибо за хорошие уроки. Есть вопрос про директивы, которые пишутся примерно так {$I-} помогите, пожалуйста, с ними разобраться Автор, добавлено 1.12.09, 11:42:51 Директивы {$I} используются для контроля за операциями ввода-вывода. Перед участком, где возможны ошибки ввода-вывода, ставится директива {$I-}. Она отключает автоконтроль этих ошибок, и программа не прерывается. После этого участка ставится директива {$I+}, возобновляющая автоконтроль. Далее необходимо вызвать функцию IOResult и проанализировать возвращаемый ею результат. Если функция возвратит 0, то ошибок не было. Функция IOResult досталась Delphi в наследство от Turbo Pascal. Я думаю, что в Delphi более удобной альтернативой является использование операторов try. Кстати, спасибо за вопрос, введу материал в основную часть урока. Иван, добавлено 19.10.10, 22:16:44 У меня вопрос к фразе \\\"На мой взгляд, это удобнее и проще\\\". Какой именно? Тот что через try или же через {$I-}. Автор, добавлено 19.10.10, 22:57:58 На мой взгляд, проще или скорее привычнее, через try. Иван, добавлено 20.10.10, 11:37:14 Ясно. А кстати хотел все спросить, почему тебя нет в icq? А то так хотел написать, не получается. И еще. Вот я попробовал исключительную ситуацию. Конкретный пример: try one:=strtofloat(edit1.Text); two:=strtofloat(edit2.Text); except messagebox(handle, \\\'Заполните все поля!\\\', \\\'Пустые(ая) строка(и)\\\', mb_ok or mb_iconwarning); end; try otv:=one/two; messagebox(handle, \\\'otv\\\', \\\'Ответ\\\', mb_ok or mb_iconinformation); except messagebox(handle, \\\'Деление на ноль!\\\', \\\'Не верные действия\\\', mb_ok or mb_iconstop); end; Почему-то если он встречает первый альтернативный вариант, когда окно(а) ввода пуст(ы), то он идет и ко второму альтернативному варианту. Почему? Например в моей ситуации когда какая-то строка ввода пуста он пишет Заполните все поля, после нажатия на Ок, сразу выдает что будто я делю на ноль, сразу же после нажатия на кнопку Ок. Автор, добавлено 20.10.10, 16:54:17 Я не с компа, но. Если поля едитов пусты, функция StrToFloat не сработает и будет И.С. но в переменных будет какое-то значение, может и ноль скорее всего, вот ты на него и делишь. Проверь это оператором if или точку останова поставь и посмотри. Алексей, добавлено 19.12.10, 11:05:29 а я все равно не понимаю, TRY - это пробовать, EXCEPT - если try не сработал. тогда почему эти строки вызывают ошибку try Memo1.Lines.LoadFromFile('c:\1.bat') except showmessage('файла не существует') end; т.е. "попробуй открыть файл, если не сможешь, то сообщи". вместо этого программа критично завершается. (файла естественно нет). в чем ошибка ? Автор, добавлено 19.12.10, 11:45:41 Если вы выполняете программу в среде Delphi, то сама Delphi реагирует по-любому на ошибку, если эту реакцию не отключить, как написано в окончании урока. Гость_, добавлено 5.06.11, 12:01:04 Спасибо автору за урок! Сегодня практиковался с оператором try и возник небольшой вопрос: в такой программе <...> a:=3; b:=0; try c:=a/b; showmessage('All right! C='+floattostr(c)); finally showmessage('Обязательный вариант'); end; <...> при срабатывании процедуры, в которой находится try выдаётся ошибка о том что есть деление на ноль, секция finally срабатывает как положено, реакция среды была отключена, и даже при запуске вне среды разработки появляется сообщение об ошибке что есть деление на ноль. При выполнении такой программы: <...> a:=3; b:=0; try c:=a/b; showmessage('All right! C='+floattostr(c)); except showmessage('деление на ноль'); end; <...> всё срабатывает отлично, без всяких сообщений-ошибок по поводу делениия на ноль. Подскажите пожалуйста, это так и должно быть при использовании try/finally, или это у меня что-то не так? Гость_, добавлено 5.06.11, 12:09:48 И почему нету такого сообщения-ошибки при выполнении try/except? Автор, добавлено 5.06.11, 15:47:51 Ну, вы сами ответили на все вопросы. Такова особенность данного оператора. Мне остается только подтвердить что так и должно быть и доработать статью, чтобы подобных недомолвок не возникало. Вам спасибо! Олег, добавлено 5.04.13, 11:40:57 Добрый день, подскажите как мне сделать так чтоб после закрытия программы появлялась определенная форма. заранее спасибо . Автор, добавлено 5.04.13, 12:16:03 После закрытия программы не может появиться форма, может быть запущена другая программа. Есть несколько функций для запуска сторонних программ, например, n:=WinExec('АдресПрограммы', SW_RESTORE); При успешном запуске возвращается значение большее 31. Вот, сначала запускаете программу, затем закрываете свою. Интернет-магазин электрооборудования |
|