Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0043234_0ADD1_ayap.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
682.5 Кб
Скачать

Работа с клавиатурой

Модуль Crt позволяет работать с управляющими клавишами и комбинациями клавиш. Нажатие каждой клавиши преобразуется либо в ее ASCII-код, либо в так называемый расширенный код (scan-код) и записывается в буфер клавиатуры, из которого затем и выбирается процедурами ввода. Под каждый код отводится два байта. Если нажатие клавиш соответствует символу из набора ASCII, в первый байт заносится код символа. Если нажата, к примеру, клавиша курсора, функциональная клавиша или комбинация клавиш с CTRL или ALT, то первый байт равен нулю, а во втором находится расширенный код, соответствующий этой комбинации.

Для работы с клавиатурой модуль Crt содержит функции ReadKey и KeyPressed.

Модули Dos и WinDos

Модули Dos и WinDos содержат подпрограммы, реализующие возможности операционной системы MS-DOS - например, переименование, поиск и удаление файлов, получение и установку системного времени, выполнение программных прерываний и так далее. Эти подпрограммы в стандартном Паскале не определены. Для поддержки подпрограмм в модулях определены константы и типы данных.

Модуль Dos использует строки Паскаля, а WinDos - строки с завершающим нулем.

Модуль Graph

Модуль обеспечивает работу с экраном в графическом режиме.

Экран в графическом режиме представляется в виде совокупности точек - пикселов. Цвет каждого пиксела можно задавать отдельно. Начало координат находится в левом верхнем углу экрана и имеет координаты (0, 0). Количество точек по горизонтали и вертикали (разрешение экрана) и количество доступных цветов зависят от графического режима. Графический режим устанавливается с помощью служебной программы - графического драйвера.

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

Модуль Graph обеспечивает:

  • вывод линий и геометрических фигур заданным цветом и стилем;

  • закрашивание областей заданным цветом и шаблоном;

  • вывод текста различным шрифтом, заданного размера и направления;

  • определение окон и отсечение по их границе;

  • использование графических спрайтов и работу с графическими страницами.

В отличие от текстового режима, в графическом курсор невидим.

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

Эти параметры устанавливаются с помощью соответствующих процедур. Возможные значения параметров определены в модуле Graph в виде многочисленных констант.

Структура графической программы

Программа, использующая графический режим, должна содержать следующие действия:

  • подключение модуля Graph;

  • перевод экрана в графический режим;

  • установку параметров изображения;

  • вывод изображения;

  • возврат в текстовый режим.

Пример #2.

Программа, выводящая на экран серию приятных глазу разноцветных линий, движущийся смайлик и текст "The end" (рис. 2).

program lines;

uses Graph, Crt; { 1 }

const

grDriver : integer = Detect;

size = 40;

s2 = size div 2;

s4 = size div 4;

margin = 40;

var

grMode : integer;

ErrCode: integer;

HalfX, HalfY : integer;

x, y, x1, y1, x2, y2, i : integer;

begin

randomize;

{ ---------------------------инициализация графики ----- }

InitGraph(grDriver, grMode, 'd:\tp\bgi'); { 2 }

ErrCode := GraphResult; { 3 }

if ErrCode <> GrOK then begin

writeln('Ошибка графики: ', GraphErrorMsg(ErrCode));

exit end;

{ ------------------------------------ вывод линий ----- }

HalfX := GetMaxX div 2; { 4 }

HalfY := GetMaxY div 2;

x := HalfX; x1:= x;

y := HalfY; y1:= y;

for i := 1 to 450 do begin { 5 }

x2 := round(cos(0.05 * i) * HalfY) + HalfX;

y2 := round(sin(0.02 * i) * HalfY) + HalfY;

if (i mod 10) = 0 then SetColor(random(15) + 1);

Line(x1, y1, x2, y2);

Line(x, y, x2, y2);

x1 := x2; y1 := y2;

delay(5);

end;

{ --------------------------- формирование спрайта ----- }

SetColor(Cyan);

x := margin; y := x;

Circle(x + s2, y + s2, s2);

SetFillStyle(InterLeaveFill, Green); { 6 }

FillEllipse(x + s4,y + s4, s4, s4 div 2);

FillEllipse(x + 3 * s4,y + s4, s4, s4 div 2);

SetLineStyle(SolidLn, 0, ThickWidth); { 7 }

Line(x + s2, y + s4, x + s2, y + s2);

SetColor(Red);

Arc(x + s2, y + s2, 200, 340, s4);

Getmem(image, imagesize(x, y, x + size, y + size)); { 8 }

GetImage(x, y, x + size, y + size, image^); { 9 }

PutImage(x, y, image^, XorPut);

{ ------------------ вывод движущегося изображения ----- }

while x < GetMaxX - margin - size do begin { 10 }

PutImage(x, y, image^, XorPut);

delay(20);

PutImage(x, y, image^, XorPut);

inc(x, 5);

end;

PutImage(x, y, image^, XorPut);

{ ----------------------------------- вывод текста ----- }

SetColor(Cyan);

SetTextStyle(GothicFont, HorizDir, 4); { 11 }

OuttextXY(HalfX + margin, HalfY - margin, 'The end');

readln;

CloseGraph { 12 }

end.

Графическая библиотека подключается в операторе 1. В графический режим экран переводится в операторе 2 вызовом процедуры InitGraph. Ей надо передать три параметра: номер графического драйвера (grDriver), его режим grMode и путь к каталогу, в котором находятся драйверы.

Рис. 2.

Если параметр grDriver равен константе Detect, заданной в модуле Graph, выбор режима выполняется автоматически.

Если графический режим выбирался автоматически, для позиционирования изображений на экране необходимо получить доступное количество точек по X и по Y с помощью функций GetMaxX и GetMaxY (оператор 4). В данной программе с помощью этих функций формируются координаты центра экрана.

В цикле (оператор 5) выводится серия линий с небольшой задержкой. Цвет линий изменяется случайным образом через каждые 10 итераций.

Следующий фрагмент программы демонстрирует работу с графическими спрайтами, которые применяются для вывода движущихся изображений. Для увеличения скорости отрисовки изображение формируется один раз, после чего заносится в память с помощью процедуры GetImage (оператор 9). Объем памяти, необходимый для размещения спрайта, определяется с помощью процедуры ImageSize, выделение памяти выполняет процедура GetMem (оператор 8).

При формировании изображения использована процедура установки стиля закраски SetFillStyle (оператор 6). Он используется процедурой рисования закрашенного эллипса FillEllipse. Стиль линии, задающий повышенную толщину линии, устанавливается процедурой SetLineStyle (оператор 7). Этот стиль действует при выводе отрезка (Line) и дуги (Arc).

Для вывода спрайта используется процедура PutImage. Ее четвертый параметр задает способ сочетания выводимого изображения и фона. Операция исключающего ИЛИ (она задается константой XorPut), примененная дважды, позволяет оставить неизменным фон, по которому движется изображение (цикл 10).

Перед выводом текста устанавливается его стиль (оператор 11). Стиль текста состоит из имени шрифта, его расположения (горизонтальное или вертикальное) и масштаба. В модуле Graph имеется один растровый шрифт и несколько векторных. Каждый символ растрового шрифта определяется точечной матрицей 8 х 8, символ векторного шрифта задается набором кривых.

В конце программы восстанавливается исходный режим экрана (оператор 12).