- •Введение
- •Управление экраном в текстовом режиме
- •Установка текстового режима
- •Установка цвета и фона
- •Управление курсором.
- •Управление строками.
- •Управление звуком.
- •Текстовые окна.
- •Использование клавиатуры.
- •Организация меню пользователя. Элементы псевдографики.
- •Виды меню
- •Использование буфера экрана.
- •Управление экраном в графическом режиме.
- •Стандартные подпрограммы для работы в графическом режиме
- •Установка графического режима.
- •InitGraph (var Driver,Mode:integer; DriverPath:string) -
- •Координаты, графические окна.
- •Выбор цвета, стиля заполнения.
- •Геометрия
- •Точки и линии.
- •Многоугольники
- •Дуги, окружности, эллипсы
- •Вывод текста
- •Сохранение и выдача изображений
- •Дополнительные стандартные подпрограммы для работы в графическом режиме. Анализ графического режима
- •Установки графических окон, страницы
- •Выбор палитры, заполнения
- •Геометрия
- •Установки вывода текста.
- •Организация библиотек пользователя
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Приложение 1. Кодировочная таблица пэвм.
- •Приложение 2. Константы графического режима.
Управление звуком.
Работу со звуком в модуле Crt обеспечивают две процедуры:
включение сигнала заданной частоты :
Sound(N:word)
отключения сигнала:
NoSound.
Процедура Sound генерирует звуковые сигналы частотой N,изменяющейся в пределах 37-32767 Гц. Громкость звука не регулируется, сигнал будет звучать до момента его выключения процедурой NoSound.
Для организации паузы в работе программы определена процедура, выполняющая задержку на заданное число миллисекунд:
Delay(N:word).
При выводе звуковых сигналов обычно используются все указанные процедуры вместе.
Пример.
Uses Crt;
Begin
Sound(220); { включения звука с частотой 220}
Delay(300); { пауза на 0.3 сек }
NoSound; { отмена звука}
End.
Задание.
Используя процедуры Sound, Nosound, Delay оформите вывод на экран музыкального слова " К О Л О Б О К " . Вывод каждой буквы сопроводить звуковым сигналом частотой, соответствующей порядковому номеру символа в кодовой таблице ( функция ORD),увеличенному в 100 раз. Время звучания каждой буквы 1 секунда.
Текстовые окна.
Window(x1,y1,x2,y2:byte);
Данная процедура определяет на экране текстовое окно с координатами верхнего левого угла экрана x1,y1, нижнего правого x2,y2. Максимальный размер окна определяется выбранным режимом. Режиму с 80 столбцами соответствует окно (1,1,80,25),режиму с 40 столбцами окно (1,1,40,25). Процедура Window помещает курсор в т.(1,1) установленного окна.
Многие процедуры и функции CRT работают относительно координат текущего окна, включая Window, ClrEol, ClrScr,DelLine, GotoXY, InsLine, WhereX, WhereY и все процедуры ввода/вывода. Координаты текущего окна хранятся соответственно в переменных WindMin и WindMax типа word, и отсчитываются отностительно точки с координатами (0,0), а не (1,1). Младший байт содержит значение координаты Х, а старший байт Y, поэтому координаты верхнего левого угла определяются выражениями:
x1:=Lo(WindMin),
y1:=Hi(WindMax),
координаты правого нижнего:
x2:=Lo(WindMax) ,
y2:=Hi(WindMax).
Пример.
(* вывод на экран окон произвольного размера *)
(* различного цвета фона *)
Uses crt;
Var x,y:integer;
Begin
ClrScr;
Randomize;
repeat
x:=random(MaxX);
y:=random(MaxY);
Window(x,y,x+random(10),y+random(8)); { определение }
TextbackGround(random(16)); { размера окна }
Delay(100);
ClrScr; { заполнеие фоном }
until KeyPressed;
End.
Задание.
Вывести изображение российского трехцветного флага в центре экрана размером 30*15. Каждая цветовая полоса задается текстовым окном ( ширина 30 позиций, высота 5) и заполняется соответствующим цветом.
Использование клавиатуры.
Клавиатура - это основное средство ввода информации в ПЭВМ , поэтому гибкая обработка сигналов с клавиатуры является важным элементом создания эффективных программ.
В процессе работы с клавиатурой производится анализ кода нажатой клавиши, называемый кодом сканирования. Каждая из клавиш клавиатуры имеет свой уникальный код .
Сдандартная клавиатура имеет три типа клавиш :
символьные ( буквы , цифры, знаки арифметических операций, знаки пунктуации и специальные ENTER, ESC, BACKSPACE, TAB);
управляющие ( функциональные F1-F10, клавиши перемещения курсора, Alt+<другие клавиши>, Ctrl+<другие клавиши>, Shift+<другие влавиши>).;
сдвига (смена регистов Ctrl,Alt,Shift, фиксации регистров CapsLock,ScrollLock,NumLock, вспомогательные клавиши).
Символьные клавиши генеируют при нажатии код в виде одного значения.
Управляющие клавиши генерируют расширенный код сканирования, состоящий из двух значений. Первое является признаком управляющей клавиши , второе содержит код сканирования.
Клавиши сдвига имеют коды , которые не распознаются средствами Паскаля. Обработка кодов производится на системном уровне.
В модуле Crt определены две дополнительные функции управления клавиатурой: ReadKey и KeyPressed.
KeyPressed:boolean возвращает значение true если на клавиатуре была нажата клавиша, и false в противном случае. При этом введенные символы из буфера клавиатуры не удаляются. Данную функцию можно использовать для завершения цикла по нажатию любой клавиши.
Пример 1.
(* использование функции ReyPressed *)
Uses Crt;
Begin
(* заполнение экрана до нажатия любой из клавиш *)
Clrscr;
Randomize;
repeat
GotoXY(Random(70),Random(50));
write('привет !');
delay(300)
Until KeyPressed;
End.
Readkey:char.
Данная функция предназначена для управления работой клавиатуры и возвращает код нажатой клавиши. Символ соответствующей нажатой клавиши на дисплее не отображается . При использовании клавиш управления функция ReadKey сначала получает значение нулевого символа (#0), следующее обращение к ReadKey возвращает расширенный код клавиши.
Функция ReadKey считывает символ из буфера клавиатуры с одновременным его удалением из буфера или ожидает нажатия какой-либо клавиши.
Пример.
{ анализ вводимых пользователем клавиш }
Uses Crt;
var ch:char;
Begin
ClrScr;
repeat
write(' Нажмите клавишу :');
ch:=ReadKey;
if ch=#0
then { расширенный код сканирования }
begin
ch:=readkey;
write(' Клавиша ');
case ch of
#59..#68 : writeln('функциональная: F1-F10');
#82 : writeln('вставка : Ins');
else
begin
write(' перемещения курсора');
writeln(' расширенный код = ',ord(ch))
end
end ; {case}
end
else writeln(' код символа = ',ord(ch))
until ch=#27 ; { клавиша Esc }
ch:=ReadKey { ожидание нажатия клавиши
для выхода из программы }
end.
В приложении 1 приведена кодовая таблица ПЭВМ и все расширенные коды сканирования.
Задание.
Используя рассмотренные процедуры разработать программу,которая по нажатию клавиш:
«стрелка вправо и влево» меняет цвет фона (по кругу от 0до 7)
«стрелка вверх и вниз» меняет цвет символов ( от 0до 15 )
- алфавитно-цифровой клавиатуры воспроизводит данный символ на экран дисплея.
- Ecs завершает работу программы и восстанавливает первоначальные параметры цветности.