- •Лабораторная работа №3 Динамические структуры данных. Класс как динамическая структура данных. Создания пользовательского класса в Delphi.
- •1. Цель работы:
- •2. Порядок выполнения работы и требования к отчету:
- •3. Теоретические сведения
- •4. Задание на лабораторную работу
- •X,y:integer; //текущие координаты точки
- •X,y,w:integer;
- •Implementation
- •I, j:Integer;
Лабораторная работа №3 Динамические структуры данных. Класс как динамическая структура данных. Создания пользовательского класса в Delphi.
1. Цель работы:
Целью лабораторной работы является изучение динамических структур данных – классов.
2. Порядок выполнения работы и требования к отчету:
1. Ознакомится с описанием на лабораторную работу.
2. Разработать программу согласно заданию на лабораторную работу.
3. Отчет по лабораторной работе должен содержать:
тему и номер работы;
цель работы;
ход работы - краткое описание используемых компонент и функций;
результаты – части исходных текстов программы, где реализуется поставленное задание;
вывод о проделанной работе.
Отчет оформляется в соответствии с правилами оформления текстовых документов.
3. Теоретические сведения
Динамический тип данных - класс.
Классы — это специальные типы данных языка Object Pascal, которые используются для описания объектов.
В состав класса могут входить поля, методы, свойства и обработчики событий.
Типичное определение нового класса выглядит следующим образом:
type Имя класса = class (Класс-предок)
{Список состава класса}
private {частные описания}
protected
{защищенные описания}
public {общедоступные описания}
published {опубликованные описания}
end;
где Имя класса — любое корректное имя (выбирается произвольно), Класс-предок — название класса, наследником которого является создаваемый класс, а Cписок состава класса содержит свойства и методы нового класса.
Для каждого элемента класса можно установить разную видимость. Для этого предназначены четыре ключевых слова: private, protected, public и published.
Видимость элемента класса определяет, где в программе и как будет виден данный элемент класса.
Поле класса предназначено для хранения данных, содержащихся в объекте. Описание поля не отличается от описания обычной переменной и может быть любого типа.
Методы — это процедуры или функции, принадлежащие объекту. Методы определяют поведение объекта. Для вызова метода объекта нужно указать имя объекта, с которым ассоциирован данный метод, затем, через точку, — название метода.
Технология двойного буфера отображения при отображении графики.
При отображении графики, которая динамически меняется во времени наблюдается эффект мерцания изображения так как каждый элемент перерисовывается за определенное время, а так же перерисовываются элементы интерфейса связанные с изображением. Поэтому во всех современных приложениях связанных с отображением графики часто меняющейся во времени и состоящей из множества элементов используется технология BackBuffer (DoubleBuffer). Смысл технологии заключается в использовании дополнительной плоскости рисования, которая находится в памяти и на которую производится отрисовка графических элементов изображения. После того как все элементы отрисованы, данная плоскость рисования целиком копируется на основную плоскость рисования, и изображение появляется на экране сразу, без задержек на отрисовку каждого элемента.
В Delphi данная технология может быть реализована следующим образом.
Создается объект класса TBitmap. У данного объекта есть плоскость рисования (свойство Canvas), которая расположена в памяти. На данную плоскость рисования производится отображение всех необходимых графических элементов. Затем эта плоскость рисования может быть скопирована целиком на основную плоскость рисования при помощи метода класса TCanvas - Draw(x,y:integer;g:TGraphic), где x,y – позиция отрисовки, g – любой графический объект имеющий плоскость рисования.
Например, заполнение черным цветом и вывод красной точки посередине на PaintBox1.Canvas при помощи данной технологии:
var b:TBitmap;
Begin
// создание дополнительной плоскости рисования
b:=TBitmap.Create;
// задание размеров плоскости
b.Height := PaintBox1.Height;
b.Width := PaintBox1.Wodth;
// заполнение черным цветом
b.Canvas.Brush.Color := clBlack;
b.Canvas.Pen.Color := clWhite;
b.Canvas.Rectangle(0,0,b. Width,b. Height);
// вывод красной точки
b.Pixels[b.Height div 2,b.Width div 2]:=clRed;
// копирование на основную плоскость рисования
PaintBox1.Canvas.Draw(0,0,b);
// удаление дополнительной плоскости рисования
b.Free;
end;
Опрос клавиатуры.
Иногда в приложения необходимо узнать состояние клавиш клавиатуры. Это можно сделать несколькими способами:
- У компонент, которые воспринимают ввод с клавиатуры, есть методы: OnKeyUp – вызывается когда нажата клавиша и OnKeyDown – вызывается когда клавиша отпущена. Этим методам в качестве параметра передается виртуальный код нажатой или отпущенной клавиши. Эти методы вызываются только, если элемент интерфейса, реализуемый данным компонентом, активен.
- При помощи функции GetAsyncKeyState, которая возвращает состояние определенной клавиши, не зависимо от того какой элемент интерфейса является активным.
Функции, необходимые для выполнения работы.
GetAsyncKeyState(vk:intger):longword – возвращает состояние кнопки клавиатуры с виртуальным кодом vk;
Например, VK_DOWN,VK_UP,VK_LEFT,VK_RIGHT – клавиши курсора.
Возвращаемое значение:
$0000 – кнопка не нажата
$8000 – кнопка нажата
$8001 – кнопка нажата с последнего вызова GetAsyncKeyState
Например, проверка нажат пробел или нет:
if (GetAsyncKeyState(VK_SPACE) and $8000) = $8000
then // нажат
else // нет