Уроки 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 встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называется исключительной. Например, деление на ноль - классический пример исключительной ситуации.
  
   Как в такой ситуации действует человек? Если он пытается что-то сделать, и это не получается - он идёт другим путём. Так же и компьютер, следующий программе, умеющей обрабатывать исключительные ситуации. Он не бросает выполнение программы, не виснет, а обходит исключительную ситуацию, выполняя альтернативный вариант фрагмента, в которой исключительная ситуация возникла.
  
   Возникает вопрос, почему бы не поставить проверку, например, на равенство нулю знаменателя при делении? Можно и поставить. Но во многих случаях источник исключительной ситуации далеко не так очевиден, а на все случаи жизни проверки не введёшь.
  
   Итак, для контроля исключительных ситуаций программист должен подготовить как основной вариант фрагмента, где возможна исключительная ситуация, так и его вариант, в котором она заведомо невозможна, или выводится информационное сообщение для пользователя.
  
   Вот как выглядит оператор контроля исключительных ситуаций:
  
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 будет предоставлять вашей программе возможность самостоятельно обрабатывать исключительные ситуации, среди которых могут быть и ситуации, возникновение которых прописано специально как удобный инструмент достижения необходимых результатов. 
 
 
 
 
  
 |