Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Модуль Сrt. Работа с экраном в текстовом режиме





 

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

Для инициализации (установки) текстового режима используется процедура TextMode(Mode:word). Выполнение этой процедуры приводит к очистке экрана и активации указанного режима.

TextColor(Color:byte) - устанавливает цвет выводимых на экран символов.

TextBackGround(Color:byte) - устанавливает цвет фона, т.е. цвет области, которая окружает отображаемый на экране символ.

ClrScr - очищает активное окно и устанавливает курсор в верхний левый угол.

GotoXY(x,y:byte) - перемещает курсор в позицию с координатами X,Y в рамках активного окна.

WhereX - возвращает X-координату текущей позиции курсора.

WhereY - возвращает Y-координату текущей позиции курсора.

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

KeyPressed:boolean - возвращает значение True, если на клавиатуре была нажата какая-либо клавиша. В противном случае эта функция возвращает значение False.

ReadKey:char - считывает символ с клавиатуры. Считываемый символ на экране не отображается.

Практически любая программа, разработанная для ПЭВМ, использует дисплей для отображения вводимой и выводимой информации. В зависимости от типа используемого в ПЭВМ адаптера (ПЭВМ комплектуется одноцветным и цветным графическим адаптером) всю выводимую на экран дисплея информацию подразделяют на текстовую и графическую. Соответственно выделяют текстовый и графический режимы.

 

Модуль Graph. Работа с экраном в графическом режиме

 

Модуль Graph поддерживает графический режим работы дисплея. В этом режиме любое изображение на экране дисплея синтезируется из множества мельчайших элементов, называемых пикселями. Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки между отдельными пикселями отсутствуют. Если группа смежных пикселей светится, то они воспринимаются не как совокупность отдельных точек, а как сплошной участок. Таким образом, на экране дисплея может быть синтезировано любое графическое изображение.

В графическом режиме экран дисплея разделяется прямоугольной сеткой, каждый элемент которой имеет свои координаты. Левый верхний угол экрана имеет координаты (0,0). Значение левой координаты (X) увеличивается в горизонтальном направлении слева направо. Значение правой координаты (Y) увеличивается в вертикальном направлении сверху вниз. Количество точек по горизонтали и вертикали называется разрешающей способностью.

Координаты правой нижней границы экрана можно определить, используя функции GetMaxX и GetMaxY.

Реализация графического режима в ПЭВМ обеспечивается благодаря наличию специальной схемы, называемой графическим адаптером. ПЭВМ может комплектоваться следующими типами графических адаптеров: CGA, VCGA, EGA, VGA, Hercules, AT&T, PC-3270, IBM-8514. Работу графического адаптера поддерживает специальная программа, называемая драйвером. Загрузочный модуль драйвера хранится в специальном файле с расширением bgi. Используемый адаптер может функционировать в различных режимах.

Рассмотрим пример инициализации (установки) графического режима:

 

USES Graph;

VAR Gd,Gm:integer;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,'');

IF GraphResult< >grOk THEN Halt(1);

...CloseGraph

END.

 

Графический режим инициализируется с помощью стандартной процедуры InitGraph. При этом переменным Gd и Gm необходимо указать номер адаптера и номер графического режима. Если переменной Gd предварительно присвоить значение константы Detect, описанной в модуле Graph (ее значение 0), то при загрузке драйвера программа выполнит автоматическое распознавание типа адаптера. При этом если есть выбор графических режимов, то устанавливается тот из них, который обеспечивает более высокое качество изображения. Третий параметр процедуры InitGraph - путь до файла с загрузочным модулем драйвера. Если путь отсутствует, то поиск этого файла будет осуществляться в текущем каталоге. Ошибки, которые могут возникать при инициализации графического режима, анализируют с помощью функции GraphResult. Для выхода из графического режима используется стандартная процедура CloseGraph. Эта процедура восстанавливает режим, существовавший до инициализации графики.

Для создания графических изображений модуль Graph предоставляет широкий набор процедур и функций. Рассмотрим точки и линии.

1. PutPixel(X,Y:integer;Color:word) - ставит на экране точку с координатами (X,Y) цвета Color.

2. Line(X1,Y1,X2,Y2:integer) - выводит на экран линию, соединяющую точки с координатами (X1,Y1) и (X2,Y2).

3. Rectangle(X1,Y1,X2,Y2:integer) - выводит на экран изображение прямоугольника с координатами диагонали (X1,Y1) и (X2,Y2).

4. Circle(X,Y:integer;Radius:word) - выводит на экран изображение окружности с координатами центра (X,Y) и радиусом (Radius).

5. Ellipse(X,Y:integer; StAngle, EndAngle, XRadius, YRadius: word) - выводит на экран изображение эллиптической дуги с центром в точке (X,Y) от начального угла StAngle до конечного угла EndAngle с горизонтальной полуосью XRadius и вертикальной YRadius. Отсчет углов осуществляется относительно горизонтальной оси в направлении против часовой стрелки (3 часа - 0, 12 часов - 90 и т.д.) Если StAngle=0, а EndAngle=360, то будет выведено изображение полного эллипса.

Установка цвета линий осуществляется процедурой SetColor(Color:integer). Цвет фона SetBkColor(Color:word).

Рассмотрим пример:

USES Graph;

VAR Gd,Gm:integer;

BEGIN

Gd:=Detect;

InitGraph(Gd,Gm,'d:\bp\bgi');

rectangle(100,50,200,100);

line(100,50,200,100);

line(100,100,200,50);

ellipse(150,75,0,360,50,25);

readln;

CloseGraph

END.

 

Закрашенные области

 

1. Bar(X1,Y1,X2,Y2:integer) - выводит на экран закрашенный прямоугольник с координатами диагонали (X1,Y1) и (X2,Y2).

2. Bar3D(X1,Y1,X2,Y2:integer;Depth:word;Top:boolean) - выводит на экран изображение закрашенного прямоугольного параллепипеда, который рисуется в изометрическом изображении с глубиной Depth. Параметр Top определяет, рисовать ли верхнюю грань параллепипеда. Значение Top выбирается из соответствующего списка констант модуля Graph. Если рисовать, Top =TopOn, если нет,Top = TopOff.

3. FloodFill(X,Y:integer;Border:word) - заполняет (закрашивает) ограниченную область текущем цветом. Граница закрашиваемой области высвечивается цветом, заданным в Border.

4. PieSlice(X,Y:integer;StAngle,EndAngle,Radius:word) - выводит на экран изображение закрашенного сектора круга, используя в качестве центра круга точку (X,Y), начального угла StAngle, конечного угла EndAngle и радиуса Radius. Контур сектора высвечивается текущим цветом. Если StAngle=0, а EndAngle=360 градусам, то PieSlice выводит на экран закрашенную окружность.

5. Sector(X,Y:integer;StAngle,EndAngle,XRadius,YRadius:word)- выводит на экран изображение эллиптического сектора, используя в качестве центра круга точку (X,Y), начального угла StAngle, конечного угла EndAngle, а в качестве горизонтальной и вертикальной полуосей - XRadius и YRadius. Контур сектора высвечивается текущим цветом. Если StAngle=0, а EndAngle=360, то на экране будет выведено изображение закрашенного эллипса.

 

Вывод текстовой информации

 

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

1. OutTextXY(X,Y:integer;Text:string) - выводит строку, начиная с точки, имеющей координаты (X,Y).

2. SetTextJustify(Horiz,Vert:word) - устанавливает значения выравнивания текста. Для установки значения выравнивания в модуле Graph определены следующие константы:

а) горизонтальное выравнивание;

LeftText = 0 - выравнивание слева,

CenterText = 1 - выравнивание по центру,

RightText = 2 - выравнивание справа,

б) вертикальное выравнивание;

Bottom Text = 0 - выравнивание снизу,

CenterText = 1 - выравнивание по центру,

TopText = 2 - выравнивание сверху.

3. SetTextStyle(Font,Direction,CharSize:word) - устанавливает текущий шрифт, тип и коэффициент увеличения символов. Параметр Font - тип шрифта. Для установки типа шрифта в модуле Graph описаны следующие константы:

DefaultFont = 0 Побитовый шрифт,

TriplexFont = 1 Тройной шрифт,

SmallFont = 2 Малый шрифт,

SansSerifFont = 3 Гротесковый шрифт,

GothicFont = 4 Готический шрифт

и другие.

Direction задает направление вывода. (0 - горизонтальное, слева направо,1 - вертикальное, снизу вверх). CharSize - коэффициент увеличения символов.

 

Пример 3.2.1. Массив X(N) напечатать на экране в виде столбцов по М элементов в каждом. Выделить элементы, превышающие по значению величину К.

 

PROGRAM P1;

USES Crt;

VAR x:array[1..20] of real;

i, N, M:integer;

K:real;

BEGIN

writeln(' N M K');readln(N,M,K);

FOR i:=1 TO N DO

BEGIN

write('X[',i,']=');readln(x[i])

END;

ClrScr;

FOR i:=1 TO N DO

IF x[i]>K THEN

BEGIN

TextColor(14);TextBackGround(4);

END

ELSE

BEGIN

TextColor(15);TextBackGround(1);

END;

GotoXY(10*((i-1) div M)+1,(i-1) mod M+1);

write(i:2,' ',x[i]:6:4)

END.

 

Пример 3.2.2. Составить программу введения пароля.

 

USES Crt;

CONST text: ARRAY [1..5] OF string=

(’ ’,

’ ВВЕДИТЕ ПАРОЛЬ ’,

’ ’,

’ ’,

’ ’);

VAR a:string[6]; f1:char; i:integer;

BEGIN

REPEAT

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

TextColor(15); {Установка цвета символов. Белый.}

TextBackGround(3); {Установка цвета фона. Темно-голубой.}

{Зарисовка рамки}

FOR i:=1 TO 5 DO

BEGIN

GotoXY(25,10+i);

writeln(text[i]);

END;

a:=’’;

{Ввод пароля}

FOR i:=1 TO 6 DO

BEGIN

GotoXY(32+(i-1),13);

f1:=readkey; {Ввод символа с клавиатуры}

TextColor(5);

GotoXY(32+(i-1),13);

write(’*’);

a:=a+f1;

END;

IF a=’paroll’ THEN

BEGIN

TextColor(12);

GotoXY(33,14);

writeln(‘OK!’);

{Звуковой сигнал “Верно”}

sound(2500);

delay(2500);

nosound;

delay(20000);

END

ELSE

BEGIN

TextColor(6);

TextBackGround(0);

{Звуковой сигнал “Неверно”}

sound(100);

delay(2500);

nosound;

delay(20000);

END;

UNTIL a=’paroll’

END.

 

Пример 3.2.3. Составить программу построения графика функции y=sin(x).

USES Graph;

{Описание функции y=sin(x)}

FUNCTION f(x:real):real;

BEGIN f:=sin(x);

END;

VAR gd, gm, Nx, Nx1, Nx2, Ny, Ny1, Ny2:integer;

x, x1, x2, h, y, y1, y2:real;

BEGIN

{Переход в графический режим}

gd:=Detect;

InitGraph(gd,gm,'c:\bp\bgi');

x1:=0;

x2:=4*Pi;

h:=0.01;

y1:=-1;

y2:=1;

{Размеры рамки}

Nx1:=10;

Nx2:=GetMaxX-Nx1;

Ny1:=10;

Ny2:=GetMaxY-Ny1;

{Зарисовка рамки}

rectangle(Nx1,Ny1,Nx2,Ny2);

{Построение графика по точкам}

x:=x1;

REPEAT

y:=f(x);

{Вычисление координаты точки экрана по заданным x и y}

Nx:=round(Nx1+(Nx2-Nx1)*(x-x1)/(x2-x1));

Ny:=round(Ny2-(Ny2-Ny1)*(y-y1)/(y2-y1));

PutPixel(Nx,Ny,12);

x:=x+h;

UNTIL x>x2;

readln; {Пауза}

closegraph {Выход из графического режима}

END.








ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры...

Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор...

ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.