Оконные диалоги. Обработка ошибок

Диалог это подпрограмма, используемая для ввода или вывода данных

ü диалоги находятся в двух библиотеках Dialogs и Windows

ü диалоги имеют входные и выходные параметры

ü при вызове диалога появляется окно с изображением входных параметров

ü ввод (если он предусмотрен) осуществляется в специальной строке

ü окно закрывается нажатием кнопки на его поверхности

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

 

Рассмотрим некоторые диалоги библиотеки Dialogs.

Функция InputBox(заголовок, текст, начальное значение): результат ввода

Все три параметра являются строковыми. Например, следующий вызов функции

S:=InputBox('Ввод','Введите целое число','3');

приведёт к появлению окна

В центре окна расположена строка ввода. Ввод завершается нажатием одной из кнопок. Результатом ввода служит строка, которая является значением функции.

 

Процедура ShowMessage('текст')

Выводит строку на экран, например,

ShowMessage('Вы ввели число 3')

организует следующее окно

Кнопка служит для закрытия окна.

 

Процедура ShowMessagePos('текст', X, Y)

Делает то же, размещая на экране окно по координатам (X, Y)

 

При работе с диалоговыми окнами проходится менять тип данных от строковых к числовым и наоборот. Это сопряжено с ошибками, которые завершаются аварийной остановкой программы. В Delphy существуют особые программные структуры, позволяющие «отловить» и обработать ошибку, не останавливая программы. Одна из них образует конструкцию с ключевыми словами

Try (попытка), Except (исключение), End (завершение)

 

Словом Try пишется перед тем фрагментом программы, в котором предполагается возникновение ошибки, а Except после него. Если ошибка произойдёт в одном из операторов между Try и Except, то управление будет передано секции между Except и End (это блок обработки ошибки). Затем программа продолжится от End.

Если ошибки не произойдёт, то по достижении Except управление перейдёт сразу к End.

program Dialog; //================================== //Использование оконного ввода/вывода // Обработка ошибок //================================== {$APPTYPE CONSOLE} uses Dialogs, //Подключение оконных диалогов //InputBox, ShowMessage, ShowMessagePos SysUtils; Var S:String; i:Integer; begin S:=InputBox('Ввод','Введите целое число',S);
Try //Готовимся к появлению ошибки i:=StrToInt(S); //Здесь место возможной ошибки ShowMessage('Вы ввели число '+IntToStr(i)); Except //Начало блока обработки ошибок ShowMessage('Вы ввели не правильное данное'); End; //Конец блока

End.

Библиотека Windows содержит функцию

MessageBox(0, текст, заголовок, значки и кнопки): номер нажатой кнопки

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

i:=MessageBox(0, 'Нажмите одну из кнопок', 'Выбор варианта',

MB_ICONQUESTION+

MB_YESNOCANCEL+

MB_DEFBUTTON2);

образует окно

Включение иконки и набора кнопок с одной выделенной определяются значением последнего параметра.

Эта функция вернёт значение, соответствующее номеру нажатой кнопки.

Ниже приводится информация для задания параметров и анализа значения функции.

Кнопки: MB_ABORTRETRYIGNORE - кнопки: Прервать, Повтор, Пропустить MB_OK - кнопка: OK (по умолчанию) MB_OKCANCEL - кнопки: OK, Отмена MB_RETRYCANCEL - кнопки: Повтор, Отмена MB_YESNO - кнопки: Да, Нет MB_YESNOCANCEL - кнопки: Да, Нет, Отмена   Иконки: MB_ICONHAND - крест в круге MB_ICONSTOP MB_ICONERROR MB_ICONQUESTION - вопрос в круге MB_ICONEXCLAMATION - восклицательный знак в треугольнике MB_ICONWARNING MB_ICONASTERISK - i в круге MB_ICONINFORMATION   Выбор кнопки по умолчанию: MB_DEFBUTTON1 ... MB_DEFBUTTON4   Возвращаемые значения: IDOK = 1 - нажата кнопка OK IDCANCEL = 2 - нажата кнопка Отмена IDABORT = 3 - нажата кнопка Прервать IDRETRY = 4 - нажата кнопка Повтор IDIGNORE = 5 - нажата кнопка Пропустить IDYES = 6 - нажата кнопка Да IDNO = 7 - нажата кнопка Нет

Пример использования диалога.

program Wind; {$APPTYPE CONSOLE} uses Windows, //Для использования диалога MessageBox Dialogs, SysUtils; Var S:String; i:Integer; begin S:='Нажмите одну из кнопок'; i:=MessageBox(0, Pchar(S), 'Выбор варианта', MB_ICONQUESTION+ MB_YESNOCANCEL+ MB_DEFBUTTON2); ShowMessage('Результат '+IntToStr(i)); End.

 

Билет №21:

Класс

 

Что такое класс

ü это структура подобная записи, объединяющая в одно целое данные (свойства) и подпрограммы (методы) их обработки

ü процесс объединения свойств и методов в один класс называется инкапсуляцией

ü формирование класса удобно тогда, когда над группой обособленных данных требуется выполнить уникальные действия

ü по способу описания класс напоминает модуль: в его разделе Type пишется заголовок (определяется тип класса), а ниже описываются методы в виде подпрограмм

ü по окончании формального описания класса в разделе Var формируются переменные данного класса, которые называются объектами

ü объекты используются аналогично записям

ü на основании одних классов могут разрабатываться другие, в которых либо появляются новые свойства и методы (наследование), либо заменяются старые (полиморфизм)

 

Как описывается класс

  1. Класс имеет заголовок (интерфейс), в котором указываются имя класса, перечисляются его свойства и методы. Структура заголовка такова
    Type
    имя класса = Class
    свойства
    заголовки методов
    End;
    Свойства перечисляются в виде переменных с указанием типов (без слова Var). Заголовки методов пишутся без кода так же, как в разделе Inteface модуля (исключительно заголовки процедур и функций)
  2. Ниже интерфейсной части размещаются полные тексты методов. Текст метода начинается дублем его заголовка, однако, перед именем метода подписывается через точку имя класса.
    Внутри методов доступны все свойства класса по своим именам

 

Как используется класс

  1. Чтобы воспользоваться описанным классом, необходимо сформировать переменные этого класса. Такие переменные называются объектами и описываются в разделе Var при помощи имён.
  2. В каждом классе имеется два особых метода – конструктор и деструктор, первый чтобы выделить, а второй – освободить память, занимаемую объектом. Перед использованием объекта необходимо вызвать конструктор, а по окончании работы – деструктор.
  3. Доступ к свойствам и методам объектов осуществляется по именам объектов, где через точку пишутся имена соответствующих свойств или методов.

 

 

Пример разработки и использования класса

 

Program Sampl_Class;

{Использование класса для работы с матрицами}

{$APPTYPE CONSOLE}

Uses

SysUtils;

//===============================================

Type

TMat= //Имя класса

Class //ИНТЕРФЕЙС КЛАССА

m:Array Of Array Of Real; //Свойство "матрица"

Constructor Create(h:Integer=1; w:Integer=1); //КОНСТРУКТОР

Procedure Put(p:Array Of Real); //Метод ввода данных

Procedure Wrt(k:Integer=5; p:Integer=2); //Метод вывода матрицы

Procedure Add(a:TMat); //Метод сложения матриц

Destructor Destroy; override; //ДЕСТРУКТОР

End;

//=============================================== ОПИСАНИЕ МЕТОДОВ КЛАССА

//Конструктор служит для создания объекта.

//Он резервирует память и формирует начальные значения переменных

//

//ВХОД: h-высота матрицы m, w-ширина матрицы

//-----------------------------------------------

Constructor TMat.Create(h:Integer=1; w:Integer=1);

Begin

Inherited Create; //Вызываем старый конструктор

SetLength(m,h,w); //Задаём размеры матрицы

End;

//-----------------------------------------------

//Процедура заполнения матрицы m данными из массива

//ВХОД: одномерный массив данных p

//-----------------------------------------------

Procedure TMat.Put(p:Array Of Real);

Var i,j,k:Integer;

Begin

k:=0;

For i:=0 To High(m) Do //Цикл по высоте матрицы

For j:=0 To High(m[i]) Do //Цикл по ширине матрицы

Begin

m[i,j]:=p[k]; Inc(k); //Последовательно копируем

End; //данные

End;

//-----------------------------------------------

//Процедура вывода матрицы m на экран

//ВХОД: k-символов на элемент, p-ширина дробной части

//-----------------------------------------------

Procedure TMat.Wrt(k:Integer=5; p:Integer=2);

Var

i,j:Integer;

Begin

For i:=0 To High(m) Do //Цикл по высоте матрицы

Begin

For j:=0 To High(m[i]) Do //Цикл по ширине

Write(m[i,j]:k:p,' '); //Выводим значение с пробелом

WriteLn; //Перевод строки

End;

End;

//-----------------------------------------------

//Процедура прибавления к m другой матрицы

//ВХОД: прибавляемая матрица a

//-----------------------------------------------

Procedure TMat.Add(a:TMat);

Var

i,j:Integer;

Begin

For i:=0 To High(m) Do //Цикл по высоте матрицы

For j:=0 To High(m[i]) Do //Цикл по ширине

m[i,j]:=m[i,j]+a.m[i,j]; //Прибавляем элемент

End;

//-----------------------------------------------

//Деструктор служит для разрушения объекта

//Он освобождает память, занятую объектом

//-----------------------------------------------

Destructor TMat.Destroy;

Begin

Inherited Destroy; //Вызываем старый деструктор

SetLength(m,0); //Разрушаем массив

End;

//===============================================

//РАЗДЕЛ ОПЕРАТОРОВ

//===============================================

Var

a,b:TMat; //Описываем объекты

Begin

a:=TMat.Create(3,3); //Формируем объект a

a.Put([1,2,3,4,5,6,7,8,9]); //Заполняем данными

a.Wrt(7,2); //Выводим на экран

WriteLn; //Переводим строку

b:=TMat.Create(3,3); //Формируем объект b

b.Put([5,5,5,5,5,5,5,5,5]);

B.Wrt(7,2);

WriteLn;

a.Add(b); //Складываем a = a + b

a.Wrt(); //Выводим результат на экран

a.Free; b.Free; //Разрушаем объекты

ReadLn;

End.

 

Билет №22:

Графический вывод на экран

 

Что такое контекст устройства (DC – Device Context)

ü это структура, содержащая описание графического устройства и средств построения изображений

ü устройствами могут быть: экран (или его часть), принтер, область памяти и др.

ü средствами построения служат инструменты: перья, кисти, шрифты, палитры и пр.

ü главнейшими свойствами инструментов являются: цвет и стиль, а также режим инструмента (принцип смешивания и способ масштабирования изображений)

ü контекст должен создаваться перед началом графических построений, а затем – разрушаться

 

Что такое канва

ü это класс TCanvas, представляющий абстрактное графическое устройство, которое обеспечивает однообразие методов вывода независимо от типа устройства

ü область графических построений определяется первой четвертью координатной плоскости (ось OX направлена слева направо, а OY - сверху вниз)

ü для удобства программирования класс TCanvas включает все инструменты, а также их свойства

ü TCanvas отвечает за создание и удаление вспомогательных графических объектов (кроме контекста DC)

 



/cgi-bin/footer.php"; ?>