Управление экраном в текстовом режиме
Модуль CRT служит для управления экраном в текстовом режиме, а также для управления клавиатурой и звуковыми сигналами. Модуль содержит библиотеку процедур (подпрограмм) и функций, которые выполняются при их вызове. Модуль подключается в начале раздела описания основной программы оператором Uses CRT;
При превышении допустимых пределов параметра N происходит преобразование N, при этом символы выводятся с мерцанием. Мерцание символов можно получить, также задавая: N:= N + 128;
В процедурах TextBackGround (N); и TextColor (N); можно применять параметр N, либо наименование цвета, например:
N:=1; TextColor (N); { либо } TextColor (Blue);
Управление клавиатурой
KeyPressed; - возвращает значение True (тип Boolean) — если была нажата любая клавиша (кроме Ctrl, Alt, NumLock и т. п.), иначе — False.
ReadKey; — возвращает символ нажатой клавиши (тип Char).
Следующие операторы выводят на экран указанную надпись до нажатия клавиши:
Repeat Writeln ('Нажмите скорее любую клавишу') until KeyPressed;
Следующие операторы ожидают нажатия клавиши с символом «А» :
Repeat Writeln ('Нажмите клавишу «А» '); c:=ReadKey until c='А';
В отличие от оператора Read оператор ReadKey не показывает на экране символ нажатой клавиши.
При нажатии на клавишу в буфер клавиатуры записывается соответствующий код, который считывается операторами Read/Readln либо функцией Readkey. При этом буфер клавиатуры очищается. При многократном нажатии на клавиши (без считывания программой символов) буфер клавиатуры переполняется и компьютер начинает «пищать». Для очистки буфера клавиатуры применяются операторы:
While KeyPressed Do c:=ReadKey;
Приведем пример программы, выводящей на экран в различных текстовых режимах надпись в виде ступеньки с заданным шагом «dx» по оси «х», в каждой строке «у», начиная с позиции (1, 1).
PROGRAM FAM;
Uses CRT;
var N: word; f, dx, x, y, i, j, xm, ym: byte;
BEGIN.
for i:=0 to 9 do begin { режимы работы монитора }.
if i<4 then N:=i else N:=256+i-4; if i=9 then N:=7;
textMode (N);
xm:=lo (WindMax)+1; ym:=hi (WindMax)+1;
write ('xm=', xm, '_ym=', ym, '_N=', N, '_Нажмите Enter'); readln;
TextBackGround (1); clrscr; TextColor (14); x:=1;
f:=8; dx:=3; { f — длина фамилии + курсор, dx — приращение отступа}.
for j:=1 to ym-1 do begin y:=j;
if (xm-x-f)<0 then x:=1; { контроль выхода надписи за экран }.
gotoXY (x, y); write ('ФАМИЛИЯ'); x:= x + dx; end;
Writeln; write ('Нажмите Enter'); readln end;
TextMode (3).
END.