Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 2
Всего онлайн: 2
Зарегистрировано юзеров: 6619
Комментариев на сайте: 650
Новый юзер: Dysonetn



Последние комментарии
c
dealrattKi прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
Это действительно радует меня. --- Бесподобное сообщение скачать fifa, скачать фифа а также [url=http://15fifa.ru/novosti-fifa-15]fifa 15 последние новости[/url] скачать фифа
intatryadebra прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
Revival RO is best free ro populair ragnarok online private server founded in 2017 2018. Revival pvp big free Ragnarok server is an online exciting free MMORPG called ragnarok online, it a fun server for MMORPG gamers in ASIA. This is a top 10 ragnarok online private server thats high on the list and top ranking with massive players online. We have many players from Asia like Malaysia, Indonesia, Philippines, Thailand, Singapore, China, Hong Kong All these players are here to play free private ragnarok online server and battle players all around the world. They want to collect the best items and gear to be strongest in War of Emperium, War of Emperium are guild wars in this free RO Server. You can play this game on android phone or tablet or pc client. Enjoy And have fun. ragnarok online server http://bit.ly/2tKyawS

Урок 52 - Исключительные ситуации

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

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

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

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

  Вот как выглядит оператор контроля исключительных ситуаций:

	try
		//основные операторы фрагмента;
	except
		//альтернативный вариант фрагмента;
	end;
  Вначале производится попытка выполнить операторы секции try/except, содержащие основной вариант программы. При возникновении в каком-либо операторе этой секции исключительной ситуации остальные операторы секции пропускаются, и выполняется секция except/end. Если всё "проходит штатно", то секция except/end пропускается.

  Ещё один вариант оператора контроля исключительных ситуаций применяется, когда необходимо, чтобы определённый фрагмент кода выполнился в любом случае, возникла исключительная ситуация или нет:

	try
		//операторы;
	finally
		//заключительные действия;
	end;
  Основные операторы, находящиеся в секции try, могут пройти штатно, или вызвать исключительную ситуацию. Операторы заключительных действий, находящиеся в секции finally, будут выполнены в любом случае.

  Есть ещё один способ контроля исключительных ситуаций, касающийся ошибок операций ввода-вывода.
Перед участком программы, где возможны ошибки ввода-вывода (а это, по сути, все операторы ввода-вывода), ставится директива {$I-}, заставляющая компилятор не включать в код автоконтроль ошибок ввода-вывода. Таким образом, в случае ошибки ввода или вывода программа не прерывается. В конце участка с операторами ввода-вывода ставится директива, включающая автоконтроль: {$I+}. Затем анализируется результат вызова функции IOResult. Если функция IOResult (вызывается без параметров) возвращает 0, значит ошибок ввода-вывода на данном участке не было.

Вот какой пример использования директив {$I} и функции IOResult содержит справка системы Delphi:

var
	F: file of Byte;
begin
	if OpenDialog1.Execute then //Открываем диалог выбора файла
	begin
		AssignFile(F, OpenDialog1.FileName); // Открываем файл
		{$I-} //Выключаем контроль ошибок
		Reset(F);
		{$I+} //Включаем контроль ошибок
		if IOResult = 0 then //Если ошибок нет
		begin
			//Сообщение с количеством байтов
			MessageDlg(?File size in bytes: ? + IntToStr(FileSize(F)), mtInformation, [mbOk], 0);  
			CloseFile(F); // Закрываем файл
		end
			else //Иначе
				MessageDlg(?File access error?, mtWarning, [mbOk], 0); // Сообщение об ошибке
	end;
end;
Функция IOResult досталась Delphi в наследство от Turbo Pascal. Тот же самый фрагмент можно составить и с использованием оператора try. На мой взгляд, это удобнее и проще.

При работе программы под управлением Delphi, система будет сама реагировать на исключительные ситуации, мешая работе операторов обработки исключений. Чтобы проверить их действие, можно запускать программу непосредственно, сворачивая Delphi и пользуясь ярлыком, установленном на Рабочем столе. Или можно отключить реакцию системы на исключительные ситуации, тем самым давая возможность отработать специально для этого написанным фрагментам программы - нашим операторам try/except/end. Для этого откроем пункт системного меню Delphi Tools -> Debugger Options.... В появившемся окошке нужно снять галку в чекбоксе Stop on Delphi Exceptions, расположенном на вкладке Language Exceptions. Теперь система Delphi будет предоставлять вашей программе возможность самостоятельно обрабатывать исключительные ситуации, среди которых могут быть и ситуации, возникновение которых прописано специально как удобный инструмент достижения необходимых результатов.

Удачи!
Встретимся в следующем уроке!


Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 16 Июня 2013
Просмотров: 7133

Урок 51 - Динамическое создание компонентов, часть (2/2) Урок 53 - Потоки в Delphi, (часть 1/3)

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



аватар Добавил(а): Joker1999obp [Новичок] Дата: 2013-10-23
спасибо за эту статью очень помогла в калькуляторе все ошибки убрал