При подключенном модуле CRT можно выводить на дисплей строки и символы, содержащие в себе управляющие коды (коды 0...31). При этом они не будут оказывать управляющие воздействия, а будут изображаться на дисплее, согласно таблице изображений символов по их ASCII-коду. Исключение составляют лишь четыре кода (табл. 15.1):
Таблица 15.1
Код
Управляющее воздействие
Название кода
($07)
Вызывает один короткий звук динамика
Bell
($08)
Сдвигает текущую позицию курсора влево на один символ, если есть куда сдвинуться в пределах строки; в противном случае не имеет эффекта
BackSpace
(BS)
($0A)
Переводит текущее положение курсора на строку ниже, не меняя текущего столбца
Line Feed
(LF)
($0D)
Переводит текущее положение курсора в начало строки
Carriage Return
(CR)
{316}
Ниже приводится ряд программ (рис. 15.2 и 15.3), показывающих работу с управляющими символами.
Программа вывода изображений управляющих кодов }
USES CRT; { Используется модуль CRT }
CONST
SpecialChars : Set of Char = [ #7, #8, #10, #13 ];
{ символы из таблицы }
Ch : Char = #0; { переменная-символ }
VAR i : Byte; { параметр цикла }
BEGIN
ClrScr; { очистка экрана }
while Ch < #32 do { цикл по #0...#31 }
begin
for i:=1 to 2 do begin
Write ( ' Код', Ord( Ch ):3, ' -—> ');
if ( Ch in SpecialChars )
then Write ( ' Имеет действие' )
else Write ( Ch:15 );
Ch := Succ( Ch ); { следующий символ }
end; {for}
WriteLn { закрытие строки }
end; { конец цикла while }
Write ( 'Нажмите ввод для окончания ...' );
ReadLn { пауза до нажатия клавиши ввода }
END.
Рис. 15.2
{Программа использования 4-х управляющих кодов экрана }
USES CRT; { используется модуль CRT }
VAR i : Byte; { переменная для цикла }
BEGIN
ClrScr; { очистка всего экрана }
WriteLn ( 'Нажимайте клавишу ввода для продолжения' );
ReadLn;
WriteLn ( ' Эффект от кода 7 - короткий звук'#7 );
WriteLn; WriteLn; ReadLn;
WriteLn ( ' Демонстрация кода возврата - #8 (BS)' );
for i:=1 to 40 do Write('/'); { 40 правых косых скобок }
for i:=1 to 40 do begin
Delay ( 100); { задержка в 100 мс }
Write ( #8, '\', #8 ); { Передвижение на символ }
{ влево, замена на '\' и снова один сдвиг влево }
Рис. 15.3 {317}
end; {for}
WriteLn; WriteLn; ReadLn;
WriteLn ('Демонстрация кода разрыва строки - f10(LF)');
WriteLn;
Write('Эта '#10'строка '#10'разорвана '#10'кодами 10');
Writeln( #10#10 ); ReadLn;
WriteLn ('Работа с кодом "возврата каретки" - #13'#10);
for i:=1 to 40 do Write('/'); { 40 правых косых скобок }
Write ( #13 ); {перевод курсора в начало }
for i:=1 to 40 do begin
Delay ( 100 ); { задержка в 100 мс }
Write ( '\'); { поочередная печать '\' }
end; { конец цикла }
WriteLn; ReadLn { пауза до нажатия клавиши ввода }
END