Константы цветов и переменные модуля

В модуле определены следующие константы цветов:

CONST

Black = 0;{чёрный}

Blue = 1;{синий}

Green = 2;{эелёный}

Cyan = 3;{голубой}

Red = 4;{красный}

Magenta = 5;{фиолетовый}

Brown = 6;{коричневый}

LightGray = 7;{светло-серый}

DarkGray = 8;{тёмно-серый}

LightBlue = 9;{ярко-синий}

LightGreen = 10;{ярко-зелёный}

LightCyan = 11;{ярко-голубой}

LightRed = 12;{розовый}

LightMagenta = 13;{малиновый}

Yellow = 14;{жёлтый}

White = 15;{белый}

Blink = 128;{мерцание символа}

Цвета с кодами от 0 до 7 можно использовать как для цвета символов, указывая в качестве параметра в процедуре TextColor, так и для цвета фона, указывая в качестве параметра в процедуре TextBackGround. Остальные цвета и код мерцания можно использовать только для символов. Чтобы сделать выводимые на экран символы мерцающими, нужно к значению константы определения цвета добавить число 16 или параметр Blink, например:

TextColor(4+Blink).

В модуле определены следующие переменные:

Var

WindMin,WindMax: word;

TextAttr: byte;

LastMode: word;

DirectVideo: boolean;

CheckShow: boolean;

CheckBreak:boolean;

CheckEof: boolean;

В переменные WindMin, WindMax процедура Window заносит координаты текущего окна. В каждой из этих переменных младший байт содержит x-координату, а старший y–координату. Извлечь значения x и y можно с помощью встроенных функций языка Турбо Паскаль Lo и Hi:

x1:=Lo(WindMin)+1;

x2:=Lo(WindMax)+1;

y1:=Hi(WindMiN)+1;

y2:=Hi(WindMax)+1;

где x1, y1, x2, y2 – координаты диагонали окна. Значения координат в переменных WindMin и WindMax отсчитываются от нуля, поэтому ко всем значениям прибавлена единица.

Переменная TextАttr содержит байт атрибутов для текущего способа вывода. Из переменной ТextАttr можно выделить цвет фона и цвет символов в виде значений целого типа: значение выражения TextАttr and $7 – соответствует цвету символа, значение выражения (Тextаttr and $70) shr 4 – соответствует цвету фона.

В переменную LastMode помещается значение текущего текстового режима, установленного процедурой TextMode.

Переменная DirectVideo позволяет или запрещает непосредственную запись информации процедурами write, writeln в видеопамять через механизм CRT, который автоматически включается при подключённом модуле CRT. Стартовое значение True переменной DirectVideo способствует выводу информации на дисплей максимально быстрым способом. При установке переменной в false эти процедуры будут использовать прерывание $10, и вывод на экран будет осуществляться с меньшей скоростью.

Переменная CheckShow разрешает (если равна true) или запрещает (в случае false) появление “снега” для видеоадаптера CGA.

Переменная CheckBreak управляет реакцией программы на комбинацию клавиш Ctrl+Break. Если эта переменная равна true, комбинация Ctrl+Break вызывает прекращение работы программы, в противном случае никакой реакции на эту комбинацию не происходит.

Переменная CheckEof управляет размещением признака конца файла. Если эта переменная равна true, комбинация клавиш Crtl+Z помещает в файл признак конца файла, в противном случае эта комбинация не вызывает никакого действия.

Опрос клавиатуры

В Ms-Dos реализуется асинхронный буферизованный ввод с клавиатуры. По мере нажатия на клавиши соответствующие коды помещаются в буфер. Из буфера они могут быть прочитаны программой. Стандартная длина буфера рассчитана на хранение до 16 кодов символов. Буфер может оказаться переполненным. При этом раздаётся звуковой сигнал и ''лишние'' коды теряются. Чтение из буфера обеспечивается процедурами read, readln и функцией readkey. Функция readkey возвращает значение типа char из буфера клавиатуры, если в нём есть хотя бы один не прочитанный символ (код этого символа берётся из буфера и возвращается в качестве значения функции). Если буфер пуст, функция будет ожидать нажатия на любую клавишу. Ввод функцией readkey не сопровождается эхо-повтором и содержимое экрана не меняется. При использовании функции readkey необходимо помнить, что в клавиатурный буфер помещаются расширенные коды нажатых клавиш. Для алфавитно-цифровых клавиш расширенный код совпадает с ASCII-кодом. Например, код, соответствующий, символу ''a'' – chr(97), симвoлу ''A'' – chr(65). При использовании функциональных клавиш F1..F10, Ins, Home, Del, End, Pgup, Pgdn,,,, ↑ ↓ → ← в буфер помещается двухбайтная последовательность: сначала #0, затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией, используется для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна ещё раз обратиться к функции, чтобы прочитать расширенный код клавиши (то есть код сканирования клавиши). Пример программы определения расширенного кода любой клавиши:

Uses CRT;

Var c: char;

Begin

Repeat

c:=readkey;

If c<>#0 then

Writeln(ord(c))

Else

Writeln('0',ord(readkey))

Until c=#27 {27 – код клавиши ESC}

End.

Функция KEYPRESSED возвращает значение типа boolean, указывающее состояние буфера клавиатуры: значение false – если буфер пуст, значение true – если в буфере есть хотя бы один символ, ещё не прочитанный программой.

Пример. Игнорировать ранее прочитанные клавиши (очистить буфер ввода).

Uses CRT;

Var c: char;

Begin

While keypressed do

C:=readkey

End.

А вот пример оператора ожидания нажатия любой клавиши: Repeat until keypressed.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: