15.4.3. Работа со строками

15.4.3.1. Процедура ClrEOL. Эта процедура может применяться как для стирания «хвостов» строк, так и для раскраски чистого экрана в полоску максимально быстрым способом. Смысл процедуры содержится в ее названии — «очистка до конца строки». Она стирает все символы в строке, начиная с текущей позиции курсора и до правого края текущего окна. Вместо стираемых символов она ставит

- 335 -

пробелы, при этом цвет строки определяется цветовым атрибутом фона. Процедура не имеет других эффектов — даже курсор при выполнении процедуры не меняет своих координат. Программа на рис. 15.11 иллюстрирует как стирание строк, так и раскраску экрана.

| USES CRT; { Примеры применения процедуры ClrEOL }

| VAR i : Byte; {счетчик цикла }

| BEGIN

| TextAttr := White; ClrScr; {очистка экрана }

| for i:=1 to 100 do Write('*ClrEOL*'); {текст на экране }

| Delay( 1000 ); {пауза в 1 с }

| TextAttr := 16*Green; { зеленый цвет фона }

| for i:=1 to 10 do begin { Стирание концов строк: }

| GotoXY( i * 8, i ); { установка курсора, }

| ClrEOL { собственно очистка. }

| end;

| TextAttr := 16*Blue; { синий цвет фона }

| for i:=12 to 25 do { Штриховка в полоску : }

| if Odd( i ) { если i нечетное, то }

| then begin

| GotoXY( 1, i ); ClrEOL { закрасить всю строку. }

| end;

| ReadLn; { пауза до нажатия ввода }

| TextAttr := White; ClrScr { восстановление цвета } END.

Рис. 15.11

15.4.3.2. Процедуры InsLine и DelLine. Эти процедуры также работают со строками. Они позволяют «прокручивать» часть текстового окна или весь экран вверх и вниз. Процедуры выполняют несложные операции: InsLine вставляет пустую строку на место той, где находится в текущий момент курсор. Все нижние строки, начиная с нее, смещаются вниз на одну строку. Самая нижняя строка, понятно, уйдет за нижнее поле окна и исчезнет. Традиционно при вводе множественной информации «с экрана» строки начинают двигаться вверх, освобождая внизу окна место для очередного запроса. Аналогично, длинные тексты пробегают по экрану снизу вверх. При помощи процедуры Insline можно организовать такую выдачу информации на экран, при которой изображение смещается сверху вниз. Для этого достаточно перед выводом очередной строки поставить в программе два оператора

- 336 -

GotoXY( 1,1 ); InsLine;

как это сделано в примере на рис. 15.12.

| USES CRT; { Пример использования процедуры InsLine }

| VAR

| i : Byte; { счетчик цикла }

| BEGIN

| ClrScr; { очистка экрана }

| for i:=1 to 25 do { цикл вывода строк }

| begin

| {->} GotoXY( 1, 1); InsLine; { расчистка места }

| WriteLn(('Строка N ', i ); { вывод строки }

| Delay ( 200 ) { задержка в 200 мс }

| end; {for}

| ReadLn { пауза до нажатия }

| END.

Рис. 15.12

В отличие от InsLine процедура DelLine удаляет строку, в которой находится курсор, подтягивая на ее место все нижестоящие строки. При этом освобождается самая нижняя строка окна. Процедура DelLine реализует «традиционную» прокрутку всего окна или его части.

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

| USES CRT; { Пример применения процедур InsLine/DelLine }

| VAR

| i, n : Byte; { переменные для циклов }

| BEGIN

| ClrScr;

| GotoXY(1, 2*7); { начало абзаца текста }

| for i:=1 to 7 do { вывод семи строк в абзац }

| WriteLn( 'Ins/Del Line' );

| GotoXY( 1,1); { вывод курсора из абзаца }

| Repeat { Цикл : }

| for i:=1 to 7 do DelLine; { поднять абзац на 7 строк }

| for i:=1 to 7 do InsLine { и опустить на 7 строк }

| until KeyPressed; { пока не нажата какая-либо клавиша }

| END.

Рис. 15.13

- 337 -

Интересных эффектов можно достичь, применяя сочетания этих команд. На рис. 15.13 приводится простейшая программа, реализующая забавный эффект «подвижного текста», который может быть использован при написании игр или заставок к программам.