Мой DELPHI – Программирование

Всё для программера

Урок 9 : Обработка исключительных ситуаций в Delphi

Урок 9 : Обработка исключительных ситуаций в Delphi

  1. Обзор
  2. С целью поддержки структурной
    обработки исключительных ситуаций (exception)
    в Delphi введены новые расширения языка
    Pascal. В данной статье будет дано
    описание того, что из себя представляет такая обработка, почему она полезна,
    будут приведены соответствующий синтаксис Object Pascal и
    примеры использования исключительных ситуаций в Delphi.

  3. Структурная обработка исключительных
    ситуаций
  4. Структурная
    обработка исключительных ситуаций -
    это система, позволяющая программисту при возникновении ошибки (исключительной
    ситуации) связаться с кодом программы, подготовленным для обработки такой
    ошибки
    . Это выполняется
    с помощью языковых конструкций, которые как бы “охраняют”
    фрагмент кода программы и определяют обработчики ошибок, которые будут
    вызываться, если что-то пойдет не так в “охраняемом”
    участке кода. В данном случае понятие исключительной ситуации относится
    к языку и не нужно его путать с системными исключительными ситуациями (hardware
    exceptions), такими как General Protection
    Fault. Эти исключительные ситуации обычно
    используют прерывания и особые состояния “железа”
    для обработки критичной системной ошибки;
    исключительные ситуации в Delphi же
    независимы от “железа”,
    не используют прерываний и используются для обработки ошибочных состояний,
    с которыми подпрограмма не готова иметь дело. Системные исключительные
    ситуации, конечно, могут быть перехвачены и преобразованы в языковые исключительные
    ситуации, но это только одно из применений языковых исключительных ситуаций.

    При традиционной обработке
    ошибок, ошибки, обнаруженные в процедуре обычно передаются наружу (в вызывавшую
    процедуру) в виде возвращаемого значения функции, параметров или глобальных
    переменных (флажков). Каждая вызывающая процедура должна проверять результат
    вызова на наличие ошибки и выполнять соответствующие действия. Часто, это
    просто выход еще выше, в более верхнюю вызывающую процедуру и т.д. :
    функция A вызывает
    B, B вызывает C, C обнаруживает
    ошибку и возвращает код ошибки в B, B проверяет
    возвращаемый код, видит, что возникла ошибка и возвращает код ошибки в
    A, A проверяет возвращаемый код
    и выдает сообщение об ошибке либо решает сделать
    что-нибудь еще, раз первая попытка не удалась.

    Такая “пожарная
    бригада” для обработки ошибок трудоемка,
    требует написания большого количества кода в котором можно легко ошибиться
    и который трудно отлаживать.

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

    Структурная обработка исключительной
    ситуации замещает ручную обработку ошибок автоматической, сгенерированной
    компилятором системой уведомления. В приведенном выше примере, процедура
    A установила бы “охрану”
    со связанным обработчиком ошибки на фрагмент кода, в котором вызывается
    B. B просто вызывает C.
    Когда C обнаруживает ошибку, то создает
    (raise) исключительную ситуацию.
    Специальный код, сгенерированный компилятором и встроенный в Run-Time
    Library (RTL) начинает поиск обработчика данной
    исключительной ситуации. При поиске
    “защищенного”
    участка кода используется информация, сохраненная в стеке. В процедурах
    C и B нет
    такого участка, а в A – есть. Если
    один из обработчиков ошибок, которые используются в A,
    подходит по типу для возникшей в C исключительной
    ситуации, то программа переходит на его выполнение. При этом, область стека,
    используемая в B и C,
    очищается; выполнение этих процедур
    прекращается.

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

    Без проверки возвращаемого
    кода после каждого вызова подпрограммы, код программы должен быть более
    простым, а скомпилированный код – более быстрым. При наличии исключительных
    ситуаций подпрограмма B не должна содержать
    дополнительный код для проверки возвращаемого результата и передачи его
    в A. B ничего не должна делать для
    передачи исключительной ситуации, возникшей в C,
    в процедуру A – встроенная система
    обработки исключительных ситуаций делает всю работу.

    Данная система называется
    структурной, поскольку обработка ошибок определяется областью “защищенного”
    кода; такие области могут быть вложенными.
    Выполнение программы не может перейти на произвольный участок кода;
    выполнение программы может перейти только на обработчик исключительной
    ситуации активной программы. Прочитать остальную часть записи »

Методы в Delphi

Методы в Delphi

  1. Обзор
  2. Чтобы полностью понять и почувствовать все преимущества Delphi, Вам
    нужно хорошо изучить язык Object Pascal. И хотя возможности визуальной
    части Delphi чрезвычайно богаты, хорошим программистом может стать только
    тот, кто хорошо разбирается в технике ручного написания кода.

    По мере обсуждения темы данного
    раздела мы рассмотрим несколько простых примеров, которые, тем не менее,
    демонстрируют технику использования важных управляющих элементов Windows.

  3. Создание
    методов с помощью визуальных средств
  4. В предыдущем уроке Вы видели,
    что синтаксический “скелет” метода может быть сгенерирован с помощью визуальных
    средств. Для этого, напомним, нужно в Инспекторе Объектов дважды щелкнуть
    мышкой на пустой строчке напротив названия интересующего Вас события в
    требуемом компоненте. Заметим, если эта строчка не пуста, то двойной щелчок
    на ней просто переместит Вас в окне Редактора Кода в то место, где находится
    данный метод.

    Для более глубокого понимания
    дальнейшего изложения кратко остановимся на концепции объектно-ориентированного
    программирования. Для начала определим базовое понятие объектно-ориентированного
    программирования – класс. Класс – это
    категория объектов, обладающих одинаковыми свойствами и поведением. При
    этом объект представляет собой просто экземпляр какого-либо
    класса. Например, в Delphi тип “форма” (окно) является классом, а переменная
    этого типа – объектом. Метод – это процедура, которая определена как часть
    класса и инкапсулирована (содержится) в нем. Методы манипулируют полями
    и свойствами классов (хотя могут работать и с любыми переменными) и имеют
    автоматический доступ к любым полям и методам своего класса. Доступ
    к полям и методам других классов зависит от уровня “защищенности” этих
    полей и методов. Пока же для нас важно то, что методы можно создавать как
    визуальными средствами, так и путем написания кода вручную.

    Давайте рассмотрим процесс
    создания программы CONTROL1, которая поможет нам изучить технику написания
    методов в Delphi. Прочитать остальную часть записи »

Урок 7: Свойства в Delphi

Урок 7: Свойства в Delphi

Содержание урока 7:

Обзор

Управление свойствами визуальных компонент в режиме
выполнения

Программа SHAPEDEM2

Заключение

  1. Обзор

Каждый компонент, который Вы помещаете на форму, имеет свое отражение
в окне Инспектора Объектов (Object Inspector). Как Вы помните, Object Inspector
имеет две “странички” – “Properties” (Свойства) и “Events” (События). Создание
программы в Delphi сводится к “нанесению” компонент на форму (которая,
кстати, также является компонентом) и настройке взаимодействия между ними
путем:

  • изменения значения свойств этих компонент
  • написания адекватных реакций на события.

Более подробно события мы рассмотрим
на следующем уроке, а сейчас сосредоточимся на свойствах и, в меру необходимости,
затронем создание откликов на события.

Как Вы уже успели, наверное,
заметить, свойство является важным атрибутом компонента. Для пользователя
(программиста) свойство выглядит как простое поле какой-либо структуры,
содержащее некоторое значение. Однако, в отличие от “просто” поля, любое
изменение значения некоторого свойства любого компонента сразу же приводит
к изменению визуального представления этого компонента, поскольку свойство
инкапсулирует в себе методы (действия), связанные с чтением и записью этого
поля (которые, в свою очередь, включают в себя необходимую перерисовку).
Свойства служат двум главным целям. Во-первых, они определяют внешний вид
формы или компонента. А во-вторых, свойства определяют поведение формы
или компонента. Прочитать остальную часть записи »

Урок 6: Печать текстовая и графическая

Урок 6: Печать текстовая и графическая

  1. Обзор
  2. В данной статье рассказывается
    о возможных способах вывода информации на печать из программы, созданной
    в Delphi. Рассматривается вывод документа
    в текстовом режиме принтера, вывод графики с помощью объекта TPrinter
    и
    печать содержимого формы. О выводе на печать отчетов с помощью генератора
    отчетов ReportSmith рассказывается
    ниже.

  3. Печать в текстовом режиме

Содержание урока 6:

Обзор

Печать в текстовом режиме

Вывод содержимого формы на печать

Графическая печать (объект TPrinter)

Прочитать остальную часть записи »

Урок 5: Рисование и закраска

Урок 5: Рисование и закраска

  1. Обзор
  2. Из данной статьи Вы узнаете о том, какие возможности есть в Delphi
    для создания приложений, использующих графику; как использовать компоненты
    для отображения картинок; какие средства есть в Delphi для оформления программы.
    Кроме того, познакомитесь с важным свойством Canvas, которое предоставляет
    доступ к графическому образу объекта на экране.

  3. Графические компоненты
  4. В стандартную библиотеку визуальных компонент Delphi входит несколько
    объектов, с помощью которых можно придать своей программе совершенно оригинальный
    вид. Это – TImage (TDBImage), TShape, TBevel.

    TImage позволяет
    поместить графическое изображение в любое место на форме. Этот объект очень
    прост в использовании – выберите его на странице Additional и поместите
    в нужное место формы. Собственно картинку можно загрузить во время дизайна
    в редакторе свойства Picture (Инспектор Объектов). Картинка должна храниться
    в файле в формате BMP (bitmap), WMF (Windows Meta
    File
    ) или ICO (icon).
    (TDBImage отображает картинку, хранящуюся в таблице в поле типа BLOB. При
    этом доступен только формат BMP.)

    Как известно, форматов хранения
    изображений гораздо больше трех вышеназванных (например, наиболее известны
    PCX, GIF, TIFF, JPEG). Для включения в программу изображений в этих форматах
    нужно либо перевести их в формат BMP, либо найти библиотеки третьих фирм,
    в которых есть аналог TImage, “понимающий” данные форматы (есть как VBX
    объекты, так и “родные” объекты для Delphi).

    При проектировании следует
    помнить, что изображение, помещенное на форму во время дизайна, включается
    в файл .DPR и затем прикомпилируется к EXE файлу. Поэтому такой EXE файл
    может получиться достаточно большой. Как альтернативу можно рассмотреть
    загрузку картинки во время выполнения программы, для этого у свойства Picture
    (которое является объектом со своим набором свойств и методов) есть специальный
    метод LoadFromFile. Это делается, например, так:

    if OpenDialog1.Execute then

    Image1.Picture.LoadFromFile(OpenDialog1.FileName);

    Важными являются свойства
    объекта Center и Stretch – оба имеют булевский тип. Если Center установлено
    в True, то центр изображения будет совмещаться с центром объекта TImage.
    Если Stretch установлено в True, то изображение будет сжиматься или растягиваться
    таким образом, чтобы заполнить весь объект TImage.

    TShape - простейшие
    графические объекты на форме типа круг, квадрат и т.п. Вид объекта указывается
    в свойстве Shape. Свойство Pen определяет цвет и вид границы объекта. Brush
    задает цвет и вид заполнения объекта. Эти свойства можно менять как во
    время дизайна, так и во время выполнения программы.

    TBevel – объект
    для украшения программы, может принимать вид рамки или линии. Объект предоставляет
    меньше возможностей по сравнению с TPanel, но не занимает ресурсов. Внешний
    вид указывается с помощью свойств Shape и Style. Прочитать остальную часть записи »