Обычно все используемые модули находятся в текущем каталоге или в системном библиотечном файле TURBO.TPL (Turbo Pascal Library). В этот файл можно добавлять и свои модули, но в стандартном варианте там находятся 5 модулей, содержащих все системные константы, типы, процедуры и функции:
SYSTEM,
DOS,
CRT,
PRINTER,
OVERLAY.
Остальные модули
GRAPH,
STRINGS,
WINDOS,
TURBO3 и GRAPH3
размещаются в отдельных файлах TPU.
В модуле System находятся все процедуры и функции стандартного языка Паскаль и расширения для Турбо Паскаля, относящиеся к типам и операторам. Этот модуль подключается к любой программе автоматически, то есть считается, что в каждой программе есть строка
Uses SYSTEM;
Модули Dos и WinDos содержат средства доступа к основным функциям операционной системы и обработки файлов.
Модуль Crt обеспечивает работу с экраном дисплея в текстовом режиме, работу с клавиатурой и простейшее управление звуком.
Модуль Printer содержит единственный интерфейсный элемент – файловую переменную Lst стандартного типа Text, системно связанную с печатающим устройством. Ее использование в стандартных процедурах приводит к выводу информации не на экран, а на печать.
Модуль Overlay предоставляет средства для организации программ, размер которых превышает объем доступной оперативной памяти.
Модуль Graph объединяет многочисленные программные средства управления графическим режимом работы дисплея.
Модуль Strings позволяет использовать строки с завершающим нулем, что вместе с расширенным синтаксисом позволяет создавать Windows-приложения.
Модули Turbo3 и Graph3 предназначены для обеспечения совместимости программ, созданных на ранних версиях Турбо Паскаля и сейчас не используются.
§9.4. Модуль Crt
Формирование изображения на экране монитора происходит с помощью дисплейного адаптера (видеокарты). В зависимости от него дисплей может работать в разных текстовых и графических режимах.
Текстовый режим поддерживают все типы адаптеров. В этом режиме каждый символ кодируется одним байтом и занимает от 16х16 до 8х8 точек или пикселов, чем существенно экономится память. В зависимости от типа адаптера и включенного режима количество строк на экране и символов в строке может быть разным: от 40х25 до 120х50, но стандартным является размер экрана в 25 строк по 80 символов.
Черно-белый текстовый режим является частным случаем цветного. Для последнего совместно с кодом самого символа задается байт атрибута цвета. Каждый символ имеет цвет начертания, или цвет переднего плана и цвет фона. Кроме этого символ может мерцать. Эта информация кодируется в байте атрибута символа:
-
|
Биты
|
|
|
7
|
Бит мерцания
|
|
6
|
Красный
|
Цвет фона
|
5
|
Зеленый
|
|
4
|
Голубой
|
|
3
|
Яркость
|
Цвет символа
|
2
|
Красный
|
|
1
|
Зеленый
|
|
0
|
Голубой
|
Таким образом, цвет фона может задаваться восьмью темными тонами, а цвет символа 16-ю, и каждому из них соответствует константа со стандартным именем.
Темные цвета:
0 (Black) – черный;
1 (Blue) – синий;
2 (Green) – зеленый;
3 (Cyan) – голубой;
4 (Red) – красный;
5 (Magenta) – фиолетовый;
6 (Brown) – коричневый;
7 (LightGrau) – светло-серый.
Светлые цвета:
8 (DarkGray) – темно-серый;
9 (LightBlue) – светло-синий;
10 (LightGreen) – светло-зеленый;
11 (LightCyan) – светло-голубой;
12 (LightRed) – светло-красный;
13 (LightMagenta) – светло-фиолетовый;
14 (Yellow) – желтый;
15 (White) – белый.
Начальная координата экрана находится в левом верхнем углу, а увеличение идет по осям Х и Y аналогично записи на бумаге по позициям и строкам. То есть экран в стандартном текстовом режиме выглядит в соответствии с рис. 9.1.
Рис. 9.1. Координаты знакомест в стандартном текстовом режиме монитора
То есть увеличение Х соответствует перебору символов в одной строке слева направо, а увеличение Y – перебору строк сверху вниз.
Первоначально при запуске программы на экране остается информация от предыдущих действий, для очистки экрана используется процедура
ClrScr;
При этом курсор помещается в верхний левый угол. Операторы Write и Writeln начинают вывод информации с текущей позиции курсора. Поэтому, если управлять положением курсора, то нет необходимости несколько раз использовать оператор Writeln или заключать в апострофы строки пробелов. Для установки курсора в точку с координатами X, Y используется процедура
GoToXY (X,Y:byte);
Для того чтобы узнать, где в текущий момент находится курсор, используются функции
WhereX: byte;
WhereY: byte;
Например:
Var A,B:byte;
Begin
... ...
A:=WhereX;
B:=WhereY;
Write('Курсор находится в столбце ',А,
' и строке ',B);
... ...
Чтобы установить цвет символов и фона, соответственно используются процедуры
TextColor (Color:byte);
TextBackGround (Color:byte);
Они изменяют дальнейший выводимый цвет символов и полей знакомест.
Первоначально ОС сама устанавливает цвета, обычно черный фон и светло-серые символы, но их можно изменить этими процедурами. Если сделать фон и символы одинакового цвета, то они становятся невидимыми. Для закраски всего экрана одним цветом после установки цвета очищается экран:
TextColor (White);
TextBackGround (Blue);
ClrScr;
GoToXY (35,13);
Write ('Середина экрана');
В модуле Crt существуют и другие способы и процедуры для работы с режимами, цветами и курсором на экране.
Работа с клавиатурой
Кроме стандартных процедур Read и Readln в модуле Crt есть две процедуры, расширяющие возможности работы с клавиатурой.
Функция
ReadKey:char;
считывает один символ с клавиатуры. Его чтение не сопровождается эхо-отображением на экране, что используется в программах с меню и других, требующих постоянного управления с помощью клавиатуры. Более того, с ее помощью можно читать коды управляющих клавиш, чего нельзя сделать с помощью команды Read.
Если нажата не символьная, а управляющая клавиша, то первое считанное число – 0, а код клавиши надо ввести еще раз.
Пример: программа проверки нажатия функциональных клавиш F1-F10.
Program DemoCode;
{ Демонстрационная программа проверки нажатия
функциональных клавиш }
Uses Crt;
Const Esc=27;
F1=59;
F10=68;
Var Ch:char; { символ, вводимый с клавиатуры }
Priznak:boolean;
Begin
TextColor(Yellow); { Буквы желтые }
TextBackGround(Blue); { Фон синий }
ClrScr;
Repeat
Ch:=ReadKey;
If Ord(Ch)=0 then
Begin
Ch:=ReadKey; { второй символ }
If Ord(Ch) in [F1..F10] then
Writeln(
'Нажата функциональная клавиша F',Ord(Ch)-58)
else
Writeln(
'Нажата управляющая клавиша с кодом ',Ord(Ch))
end else
Writeln(
'Нажата символьная клавиша с кодом ', Ord(Ch));
Until Ord(Ch)=Esc;
end.
При обращении к функции
KeyPressed:boolean;
ожидания нажатия клавиши нет, она просто опрашивает буфер клавиатуры и выдает логический результат: True – если в буфере есть какой-либо символ и False – в противном случае.
Работа со звуком
В ПЭВМ есть возможность генерировать звуковые сигналы частотой от 37 Гц до 20 КГц с помощью встроенного динамика. Из программы на Паскале воспроизводятся только чистые тона без искажений. Сила, или громкость звука не регулируется.
Стандартный звуковой сигнал длительностью 0,25 сек и частотой 800 Гц вызывается символом 7 кодовой таблицы, например:
Writeln (‘Ошибка данных’,Chr(7));
Для управления частотой звука и его продолжительностью в модуле Crt предусмотрены следующие процедуры. Включение звука:
Sound(Freq:word);
Целый аргумент указывает частоту звучания в герцах. Звук будет продолжаться, пока не будет выключен.
Отмена (выключение) звука:
NoSound;
Задержка по времени:
Delay (ms:word);
Целый аргумент указывает длительность в миллисекундах. Это универсальная процедура и может использоваться в самых различных целях. Но она использует встроенную схему таймера с интервалом 18,2 раз в секунду, поэтому для точного вычисления времени эту процедуру использовать нельзя.
Таким образом, стандартный звуковой сигнал – это последовательность процедур, например:
Sound (800);
Delay (250);
NoSound;
С помощью этих процедур и операторов цикла можно создавать разнообразные звуковые эффекты, например, проиграть гамму:
Program Gamma;
{ Пример проигрывания гаммы }
Uses Crt;
Const
{Частоты нот гаммы от ДО октавы 1 до ДО октавы 2}
Freq: Array[1..8] of word=(262,294,330,349,392,440,494,524);
VAR
i:integer;
Begin
Repeat
For i:=1 to 8 do Begin
Sound(Freq[i]); { Включение звука }
Delay(500);
NoSound; { Выключение звука }
end
Until KeyPressed;
end.
Достарыңызбен бөлісу: |