Исключительные ситуации.
Это другой неприятный момент для пользователя и программиста. Это когда появляются неожиданные англоязычные ошибки и выполняемая процедура завершает свою работу с места появления ошибки. Разработчики Borland Delphi таким контролем за ошибками и выходом из работающих модулей программы позаботились об остальных частях программы. Если ошибка появилась в первой строке, то имеет ли смысл выполнять вторую? Рассмотрим такой пример: procedure TForm1.Button1Click(Sender: TObject); При выполнении данного кода мы получаем сообщение "Floating point division by zero". И процедура дальше уже не обрабатывается. После команды деления мы не видим его результат ShowMessage(РЕЗУЛЬТАТ) Или еще такой пример: procedure TForm1.Button1Click(Sender: TObject); Если у нас окно Form1 уже открыто, то повторная попытка открыть его модально приведет к возникновению ошибки "Cannot make a visible window modal". И опять программа завершает обработку процедуры. Это приведены примитивные процедуры, но бывает такие, что даже сам программист не ожидает появления подобной ситуации, но нужно предусмотреть все. Во-первых, надо при всех операциях деления предусматривать что-то подобное if x<>0 then y:=z/x; // если x не равно нулю, то делить. даже если x никогда в вашей программе не становится нулем, но поверьте, ничего невозможного не бывает. Var st:String; Если не проконтролировать корректность ввода числа в строковую переменную st, то при попытке преобразования его в переменную типа Double, произойдет ошибка. При сомнениях, насчет отображения того или иного окна на экране использовать, например: if not Form1.Visible then Form1.ShowModal; // если окна нет на экране, то открыть его модально И так далее. Есть много опасных с этой точки зрения команд, которые при совместном использовании с другими командами или при отсутствии таковых обязательно вызывают ошибку. В уроке15 мы рассматривали пример, в котором есть директива компилятору об отключении контроля ошибок ввода-вывода. Мы открывали файл, при отключенном автоматическом контроле, после чего сами обрабатывали ошибку открытия. {$I-} // отключение контроля ошибок ввода-вывода Такой метод можно применять только с старыми форматами команд, совместимыми с языком программирования pascal и работающими только с устройствами ввода-вывода. try // начало опасно-ошибочной части процедуры: Заметьте, что этот кусок кода не вызовет ошибки выполнения. Программа просто вам сообщит об ошибке открытия окна, после чего процедура продолжит свое выполнение. Еще обратите внимание, что если в части, после except возникнет другая ошибка выполнения, то процедура таки точно завершит свою работу немедленно. Все команды, которые могут вызвать ошибку надо писать после try и до except. Аналогом try-except есть try-finally procedure TForm1.Button1Click(Sender: TObject); После finally следует строки программы, которые следует выполнять в случае успешной обработки команд, следующие после try.
|