§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.

§9.5. Модуль DOS

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

В модуле Dos введены процедуры и функции, позволяющие получить доступ к некоторым ресурсам DOS.

Для поиска первого и следующего файла с заданным именем используются соответственно процедуры:

FindFirst (Path:String; Attr:Word; Var S:SearchRec);

FindNext (Var S:SearchRec);

Здесь:

Path – путь и имя искомого файла. При отсутствующем пути поиск производится в текущем каталоге, возможно использование шаблонов.

Attr – задаваемые атрибуты файла. В качестве Attr можно использовать константу AnyFile, означающую любые атрибуты.

S – возвращаемая переменная со следующей структурой:

SearchRec=Record

Fill: Array [1..21] of byte;

Attr: byte;

Time: LongInt;

Size: LongInt;

Name: String [12];

end;

Здесь поле Fill содержит служебную информацию DOS.

Attr – реальные атрибуты файла.

Time – дата и время создания файла в упакованном виде.

Size – размер файла в байтах.

Name – имя найденного файла.

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

Для распаковки времени создания файла используется процедура:

UnpackTime (Time:LongInt; Var DT:DateTime);

Выходным параметром для неё является запись DT, имеющая следующую структуру:

DateTime = Record

Year, Month, Day, Hour, Min, Sec: Word

end;

Пример: вывод списка файлов из текущего каталога, содержащих тексты программ на языке Паскаль.

Program FindPas;

{ Поиск файлов с Паскаль-программами }

Uses Dos;

Var

DT:DateTime;

S:SearchRec;

Begin

Writeln;

FindFirst ('*.pas',AnyFile, S);

While DosError=0 do

Begin

UnpackTime (S. Time, DT);

WriteLn(' Файл ',S. Name,' создан ',

DT. Day,'.',DT. Month,'.',DT. Year,

' время: ',DT. Hour,':',DT. Min,':',DT. Sec,

' размер ',S. Size,' байт');

FindNext (S);

end

end.

Если необходимо искать файлы не в одном, а в нескольких каталогах, то используют функцию

FSearch (Path:PathStr; DirList:String): PathStr;

Тип PathStr является предопределенным:

PathStr=String [79];

Здесь: Path – имя искомого файла, может быть составным.

DirList – список каталогов, в которых будет производиться поиск, каталоги разделяются точкой с запятой, например:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Основные порталы (построено редакторами)

Домашний очаг

ДомДачаСадоводствоДетиАктивность ребенкаИгрыКрасотаЖенщины(Беременность)СемьяХобби
Здоровье: • АнатомияБолезниВредные привычкиДиагностикаНародная медицинаПервая помощьПитаниеФармацевтика
История: СССРИстория РоссииРоссийская Империя
Окружающий мир: Животный мирДомашние животныеНасекомыеРастенияПриродаКатаклизмыКосмосКлиматСтихийные бедствия

Справочная информация

ДокументыЗаконыИзвещенияУтверждения документовДоговораЗапросы предложенийТехнические заданияПланы развитияДокументоведениеАналитикаМероприятияКонкурсыИтогиАдминистрации городовПриказыКонтрактыВыполнение работПротоколы рассмотрения заявокАукционыПроектыПротоколыБюджетные организации
МуниципалитетыРайоныОбразованияПрограммы
Отчеты: • по упоминаниямДокументная базаЦенные бумаги
Положения: • Финансовые документы
Постановления: • Рубрикатор по темамФинансыгорода Российской Федерациирегионыпо точным датам
Регламенты
Термины: • Научная терминологияФинансоваяЭкономическая
Время: • Даты2015 год2016 год
Документы в финансовой сферев инвестиционнойФинансовые документы - программы

Техника

АвиацияАвтоВычислительная техникаОборудование(Электрооборудование)РадиоТехнологии(Аудио-видео)(Компьютеры)

Общество

БезопасностьГражданские права и свободыИскусство(Музыка)Культура(Этика)Мировые именаПолитика(Геополитика)(Идеологические конфликты)ВластьЗаговоры и переворотыГражданская позицияМиграцияРелигии и верования(Конфессии)ХристианствоМифологияРазвлеченияМасс МедиаСпорт (Боевые искусства)ТранспортТуризм
Войны и конфликты: АрмияВоенная техникаЗвания и награды

Образование и наука

Наука: Контрольные работыНаучно-технический прогрессПедагогикаРабочие программыФакультетыМетодические рекомендацииШколаПрофессиональное образованиеМотивация учащихся
Предметы: БиологияГеографияГеологияИсторияЛитератураЛитературные жанрыЛитературные героиМатематикаМедицинаМузыкаПравоЖилищное правоЗемельное правоУголовное правоКодексыПсихология (Логика) • Русский языкСоциологияФизикаФилологияФилософияХимияЮриспруденция

Мир

Регионы: АзияАмерикаАфрикаЕвропаПрибалтикаЕвропейская политикаОкеанияГорода мира
Россия: • МоскваКавказ
Регионы РоссииПрограммы регионовЭкономика

Бизнес и финансы

Бизнес: • БанкиБогатство и благосостояниеКоррупция(Преступность)МаркетингМенеджментИнвестицииЦенные бумаги: • УправлениеОткрытые акционерные обществаПроектыДокументыЦенные бумаги - контрольЦенные бумаги - оценкиОблигацииДолгиВалютаНедвижимость(Аренда)ПрофессииРаботаТорговляУслугиФинансыСтрахованиеБюджетФинансовые услугиКредитыКомпанииГосударственные предприятияЭкономикаМакроэкономикаМикроэкономикаНалогиАудит
Промышленность: • МеталлургияНефтьСельское хозяйствоЭнергетика
СтроительствоАрхитектураИнтерьерПолы и перекрытияПроцесс строительстваСтроительные материалыТеплоизоляцияЭкстерьерОрганизация и управление производством