Вывод текста в графическом режиме

Процедура WriteLn печатает маленькие буквы скучного начертания. В модуле Graph имеются процедуры SetTextStyleи OutTextXY, которые общими усилиями печатают буквы разного размера (в том числе и очень крупного) нескольких изящных очертаний, причем процедура SetTextStyle задает стиль и размер букв, а процедура OutTextXY печатает строку букв заданного стиля и размера в заданном месте экрана. Например, в результате выполнения фрагмента

SetTextStyle (4,0,8);

OutTextXY(200,300,’Hello!’)

на экране появится строка Hello!, выполненная шрифтом4 (готический) размера 8. Левый верхний угол строки будет находиться в точке (200,300). Число 0 означает обычное горизонтальное направление текста, 1 – вертикальное, 2 - горизонтальное с лежащими буквами. Цвет текста, как и цвет фигур, определяется процедурой SetColor.

Всего в Паскале есть 5 стандартных шрифтов:

0 - обычный растровый (остальные - векторные)

1 - полужирный

2 - тонкий

3 - газетный

4 – готический

Размер букв зависит от шрифта. Можно независимо менять высоту и ширину букв. Для этого существует процедура SetUserCharSize. Например, SetUserCharSize(7,3, 9,4) устанавливает ширину букв в 7/3 раза больше нормальной, а высоту - в 9/4.

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

Недостаток OutTextXY - она выводит только строковые выражения. Покажу, как обмануть ее и напечатать значение числового выражения. Пусть переменная aописана, как Integer, и равна 937. Оператор OutTextXY(200,200, a) не захочет ее печатать. Тогда придумаем переменную as и опишем ее, как String. Следующий фрагмент делает дело:

a:=937;

Str(a,as);

OutTextXY(200,200, as)

Процедура Strпреобразует число a=937 в строку из трех символов as=’937’.

Для симметрии покажу и обратную процедуру Val:

VAR a,err :Integer;

as :String;

Begin

as:='937';

Val(as,a,err);

WriteLn (a+1);

ReadLn

End.

Пояснения: Процедура Val преобразует строку из трех символов 937 в число 937. В результате оператор WriteLn (a+1) печатает число 938. На смысле переменной err останавливаться я не буду.

Задание 132: У вас имеется текстовый файл из произвольного числа строк. Организуйте вывод этого файла на экран векторным шрифтом. Если у вас есть время, организуйте управление с клавиатуры: пролистывание текста, выбор шрифта, выбор цвета шрифта и фона.

Управление цветом в текстовом режиме(модуль CRT)

Если вам не нужно рисовать на экране картинки, то вам не нужен и графический режим. Тем более, что вывод текста в текстовом режиме можно сделать достаточно красиво и удобно. Делается это с помощью модуля CRT. Вот какие процедуры он предлагает для этого:

TextColor(Yellow) Выбор цвета текста
TextBackground(Blue) Выбор цвета фона под текстом. Я имею в виду цвет не всего экрана, а той узенькой полоски, на которой появляется текущий текст
ClrScr Очистка экрана. Если в программе предварительно была выполнен оператор TextBackground (Blue), то после выполнения ClrScr весь экран станет синим
GotoXY(61,14) Поместить курсор в 61 столбец 14 строки

До сих пор вы не умели управлять положением текстового курсора на экране. При помощи процедуры GotoXYвы сможете помещать курсор в произвольную точку экрана, а значит и текст печатать в произвольном месте экрана. Вспомним, что в текстовом режимеэкран обычно разделен на 25 строк по 80 столбцов. Строки пронумерованы сверху вниз, столбцы - слева направо. Чтобы поместить курсор в 61 столбец 14 строки, достаточно записать GotoXY(61,14).

Задача: Закрасить экран красным цветом и посредине экрана желтыми буквами на синем фоне написать “Вход”.

Программа:

USES CRT;

BEGIN

TextBackground (Red);

ClrScr;

TextColor (Yellow);

TextBackground (Blue);

GotoXY(38,13);

WriteLn(‘Вход’)

END.

Работа с датами и временем (модуль DOS)

Каждый компьютер имеет часы и календарь. Каждый пользователь может спросить у компьютера, сколько времени и какое сегодня число, а при желании и подправить то и другое. Для работы с временеми датойна Паскале необходим новый для вас модуль DOS. Мы рассмотрим четыре процедуры этого модуля, которые работают с временем и датой:

GetTime Узнать время
SetTime Установить время
GetDate Узнать дату
SetDate Установить дату

Чтобы воспользоваться этими процедурами, вы должны придумать имена переменным, обозначающим дату и время:

God год (с 1980 по 2099)

Mes месяц (1-12)

Den день месяца

Den_Ned номер дня недели (от 0 (воскресенье) до 6 (суббота))

Chas час

Min минута

Sec секунда

Sotki сотые доли секунды

Все эти переменные должны быть целочисленными, однако не типа Integer, к которому вы привыкли, а типа Word. Таково требование упомянутых процедур. Переменная типа Word должна быть целым числом из диапазона 0 - 65535.

Вот программа, которая узнает у компьютера, какое сегодня число и сколько времени:

USES DOS;

VAR God, Mes, Den, Den_Ned, Chas, Min, Sec, Sotki : Word;

Begin

GetDate(God, Mes, Den, Den_Ned);

WriteLn(‘Сегодня ’ , Den, ‘ . ‘ ,Mes, ‘ ‘ ,God, ‘ года‘);

GetTime(Chas,Min,Sec,Sotki);

WriteLn(‘Сейчас ’ , Chas,' час. ' ,Min, ' мин. и ' ,Sec, ' сек.')

End.

Задание 133 «Быстрота реакции»: Определите быстроту своей реакции: На экране через случайный промежуток времени (секунды через 2 - 4) возникает квадрат. Как только он возник, быстрее нажимайте на какую-нибудь клавишу. Пусть компьютер вычислит, сколько сотых долей секунды прошло между этими двумя событиями.

Возможно, вас не удовлетворит работа GetTime в этой программе. Попробуйте сделать определитель быстроты реакции, не связываясь с процедурами модуля DOS. Например, засеките по секундомеру, сколько времени ваш компьютер выполняет пустой цикл for i:=1 to 10000000 do; и создайте на этой основе свою единицу времени.

А вот как установить дату и время:

SetDate(1997, 5, 22) -установить дату 22 мая 1997 года

SetTime(23, 58, 32, 93) -установить время 23 часа 58 мин 32 сек и 93 сотых

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

Задание 134 «Определитель дня недели»: Вы вводите любую дату. Компьютер должен определить день недели и напечатать его в виде “понедельник”, “вторник” и т.д. При этом вы не должны испортить календарь, то есть после того, как ваша программа завершит работу, календарь компьютера должен показывать правильную дату, а не ту, что вы ввели.

Наши рекомендации