- •Работа с графикой в паскале
- •Основные функции и процедуры модуля Crt, используемые для работы с экраном
- •Управление цветом и фоном
- •Очистка экрана и управление строками на экране
- •Управление яркостью
- •Управление курсором
- •Текстовые окна
- •Задержка изображения на экране
- •Символы псевдографики
- •Работа с текстом в графическом режиме
- •Создание анимации
- •Варианты заданий
Текстовые окна
Можно в любой момент работы использовать для вывода не весь экран, а определенную его часть, которая называется окном. Величина окна не может превышать размеры экрана.
Window(X1,Y1,X2,Y2) – процедура установки размера экрана (X1,Y1 – координаты левого верхнего угла, X2,Y2 – правого нижнего угла).
На экране могут находиться несколько окон, но активным в данный момент может быть только одно окно. Процедуры и функции работы с экраном и курсором выполняют соответствующие их назначению действия относительно текущего окна. Закрасить окно цветом, установленным процедурой TextBackGround, можно с помощью процедуры ClrScr.
Пример. На коричневом фоне экрана выделяется пурпурное окно, в котором выводится текст:
TextColor(LightGrey);
TextBackground(Brown);
ClrScr;
TextBackGround(Magenta);
Window(14,12,60,20);
Write(‘Серые буквы на пурпурном фоне в окне);
Задержка изображения на экране
Delay ()
Пример – программа texthello
Символы псевдографики
Символы, отображаемые на экране, соответствуют ASCII-кодам. Таблица ASCII- кодов приведена в Приложении 1.
Для отображения символа, не имеющего клавиши на клавиатуре следует набрать десятичный код символа на цифровой клавиатуре (предварительно установив режим Num) при нажатой клавише Alt.
Первые 32 кода соответствуют символам и управляющим сигналам для клавиатуры или принтера. Для вывода символов, соответствующих этим знакам, можно воспользоваться функцией Chr(), например, команда writeln(chr(03)) выведет на экран символ сердечка
Варианты заданий
Не отображайте курсор на экране, для задержки используйте процедуру Delay из модуля Crt.
Создайте в центре коричневого экрана окно с белой рамкой, цвет окна задается числовым кодом цвета с клавиатуры. При выборе голубого цвета в окне слева направо движется цветная надпись.
Создайте на экране три разноцветных вложенных друг в друга окна. Во внутреннем окне отобразите движущуюся надпись, меняющую цвет.
В центре серого экрана отобразите синее окно с разноцветными мигающими звездочками. При нажатии на клавишу Enter одна из звездочек становится НЛО (используйте псевдографику) и “падает”.
В разных местах экрана появляется “блуждающее” окно, заполненное разноцветными треугольниками (символы псевдографики).
Создайте любую веселую картинку с движущимся текстом или символом с использованием разноцветных окон.
РАБОТА В ГРАФИЧЕСКОМ РЕЖИМЕ
Минимальным объектом в графическом режиме является пиксель – графическая точка. Система координат экрана в графическом режиме представляется растром 640 × 480 пикселей.
Левый верхний угол графического экрана имеет координаты (0,0), соответственно нижний – (639,479). Рисунок формируется из точек растра, для каждой точки задается двоичный код её цвета. Возможна работа не с полным экраном, а с заданным окном (ViewPort). При выводе на экран изображения или отдельной точки можно задать логические операции, выполняемые над двоичными кодами цвета точки.
Для работы с графическими изображениями предназначен модуль Graph, содержащий более 90 процедур и функций.
Р абота программы, использующей графические средства компьютера, начинается с инициализации графического режима InitGraph и завершается процедурой СloseGraph. При инициализации следует указать номер драйвера (программы поддержки работы монитора), режим работы и путь к драйверу. Любая программа работы с графическим режимом имеет вид:
uses Graph;
var
grDriver : Integer; {grDriver, grMode, ErrCode – произвольные
имена переменных}
grMode : Integer;
ErrCode : Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode, 'bgi'); {bgi – каталог, в которов расположен
драйвер. Если драйвер находится в текущем
каталоге Паскаля, в кавычки следует
поместить пробел}
ErrCode := GraphResult;
if ErrCode = grOk then
begin { Do graphics }
здесь размещается текст программы работы с графикой
Readln;
CloseGraph;
end
else
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
Переменная ErrCode – сохраняет код ошибки (0..14) инициализации графического режима, полученный функцией GraphResult. Код 0 (обозначается grOK) свидетельствует о безошибочной работе.
Можно оформить инициализацию вызова графического режима по-другому:
uses Graph;
var
Gd : Integer;
Gm : Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then
Halt(1);
здесь размещается текст программы работы с графикой
Readln;
CloseGraph;
end.
Графические константы модуля Graph
текстовые и числовые значения констант, определяющих оттенок цвета, приведены в табл.1
В табл.2 приведены константы, определяющие стиль линий и закрасок, и константы для вывода текста в графическом режиме.
Таблица 2
-
Атрибут
Имя константы
Код
Значение
Константы стиля линий и закрасок (для процедур SetLineStyle и SetFillStyle)
Тип линии
SolidLn
0
Сплошная
DottedLn
1
Точечная
CenterLn
2
Штрихпунктирная
DashedLn
3
Пунктирная
UserBitLn
4
Определенная пользователем
Толщина линии
NormWidth
1
Нормальная (1 пиксель)
ThickWidth
3
Жирная (3 пикселя)
Тип закраски
EmptyFill
0
Сплошное заполнение цветом фона
SolidFill
1
Сплошное заполнение заданным цветом
LineFill
2
Заполнение горизонтальными линиями
LtSlashFill
3
Диагональное заполнение (///)
SlashFill
4
Диагональное заполнение толстыми линиями(///)
BkSlashFill
5
Обратное диагональное заполнение толстыми линиями (\\\)
LtBkSlashFill
6
Обратное диагональное заполнение (\\\)
HatchFill
7
Клетчатое заполнение
XhatсhFill
8
Косое клетчатое заполнение
InterleaveFill
9
Чередующееся линейное заполнение
WideDotFill
10
Редко расположенные точки
CloseDotFill
11
Часто расположенные точки
UserFill
12
Стиль определен пользователем
Константы работы с текстом (для процедур SetTextStyle и SetTextJustify)
Тип векторного шрифта
TriplexFont
1
Шрифт из файла trip.chr
SmallFont
2
Шрифт из файла litt.chr
SansSerifFont
3
Шрифт из файла sans.chr
GothicFont
4
Шрифт из файла goth.chr
Горизонтальное выравнивание текста
LeftText
0
Влево
CenterText
1
По центру
RightText
2
Вправо
Вертикальное выравнивание текста
BottomText
0
Вниз
CenterText
1
По центру
TopText
2
Вверх
Направление текста
HorizDir
Горизонтальное
VertDir
Вертикальное
Константы вывода точки на экран (для процедуры PutImage)
NormalPut (0)
0
Обычный вывод
XOR Put
1
Вывод с выполнением операции “исключающее или”
OrPut
2
Вывод с выполнением операции ИЛИ
AndPut
Вывод с выполнением операции И
NotPut
4
Вывод с выполнением инверсии;
Процедуры и функции модуля Graph
Наименование |
Значение |
Комментарий |
Графические примитивы |
||
Arc |
Дуга |
|
Bar |
Сплошной брус |
|
Bar3D |
Трехмерный брус |
|
Circle |
Окружность |
|
DrawPoly |
Контур из линий |
|
Ellipse |
Эллипс |
|
FillEllipse |
Заполненный эллипс |
|
FillPoly |
Заполненный многоугольник |
|
Line |
Линия (от точки к точке) |
|
LineRel |
Линия (от указателя к точке в приращениях) |
|
LineTo |
Линия (от указателя к точке в координатах) |
|
PieSlice |
Заполненный сектор |
|
Rectangle |
Прямоугольник |
|
Sector |
Заполненный эллиптический сектор |
|
Работа с курсором, координатами и отдельными точками
|
||
GetArcCoord
|
Выдача координат последней дуги |
|
GetAspectRatio |
Выдача коэффициента разрешения по осям |
|
GetMaxX |
Выдача разрешающей способности по Х |
|
GetMaxY |
Выдача разрешающей способности по Y |
|
GetX |
Выдача координаты Х курсора |
|
GetY |
Выдача координаты Y курсора |
|
GetPixel |
Выдача цвета пикселя |
|
PutPixel (X,Y: integer; color: word) |
Установка пикселя в заданную точку |
процедура выводит в (X,Y) точку, цвет которой определяется параметром color (см. константы цвета); |
MoveRel |
|
|
MoveTo |
|
|
PutPixel |
|
|
SetAspectRatio |
|
|
Работа с цветовой гаммой
|
||
FloodFill |
Заполнение области |
|
GetBcColor |
|
|
GetColor |
|
|
GetDefaultPalette |
|
|
GetFillPattern |
|
|
GetFillSetting |
|
|
GetMaxColor |
|
|
GetPalette |
|
|
GetPaletteSize |
|
|
SetAllPalette |
|
|
SetBkColor |
Установка текущего фонового цвета |
|
SetСоlor |
Установка текущего цвета |
|
SetFillPattern |
Установка шаблона заполнения
|
|
SetFillStyle |
Установка шаблона заполнения и цвета |
|
SetPalette |
Изменение одного цвета в палитре |
|
SetRGBPalette |
Модификация входов палитры для VGA |
|
Работа с текстом
|
||
GetTextSetting
|
Выдача текущих параметров шрифта |
|
InstallUserFont |
Установка шрифта пользователя |
Устанавливается шрифт, не предусмотренный в среде Турбо Паскаль |
OutText
|
Выдача строки в выходное устройство |
|
OutTextXY |
|
|
SetTextStyle |
Установка текущего шрифта, стиля и размера |
|
SetUserCharSize |
|
|
TextHeight |
|
|
TextWidth |
|
|
Работа с размерами и типами линий |
||
GetLineSetting
|
Выдача текущего стиля линии |
|
SetLineStyle
|
Установка текущей ширины и типа линии |
|
SetWriteMode
|
Установка режима вывода рисунка |
|
Работа с выдачей в окна на экране и страницы в памяти |
||
ClearDevice
|
Очистка текущего устройства вывода |
|
ClearViewPort |
Очистка текущего окна |
|
GetImage (X1,Y1,X2,Y2:word;Var BitMap) |
Сохранение битового образа в памяти |
процедура сохраняет в буфере двоичный образ заданной области экрана. X1,Y1,X2,Y2 определяют прямоугольную область экрана. Параметр BitMap является нетипизированным параметром, который должен быть больше или равен 6 плюс размер памяти, отведенный для области экрана. |
GetViewSettings (var ViewPort: ViewPortType) |
Выдача параметров текущего окна и отсечение |
процедура возвращает информацию о текущей области просмотра, содержащуюся в переменной ViewPortType. |
ImageSize(X1,Y1,X2,Y2:word): word |
Выдача числа байтов для запоминания области |
функция возвращает число байтов, необходимых для сохранения прямоугольной области экрана. X1, X2, Y1, Y2 – границы прямоугольной области |
PutImage (X,Y: word; var BitMap; BitBlt: word) |
Вывод битового образа |
Процедура выводит из буфера на экран двоичный образ заданной области памяти. Точка c координатами (X,Y) определяет верхний левый угол прямоугольной области экрана. Параметр BitMap определяет ширину и высоту области памяти. Параметр BinBlt определяет тип двоичной операции, используемой для вывода двоичного образа области на экран |
SetActivPage |
|
|
SetVisualPage |
|
|
SetGraphBufSize |
|
|
SetViewPort (X1,Y1,X2,Y2 : word, Clip : boolean) |
|
процедура устанавливает для графического вывода текущую область просмотра или окно. (X1,Y1) – верхний левый угол области просмотра. Помещает текущий указатель курсора в точку с координатами (0,0). Clip указывает установлен (True) или не установлен (False) режим отсечения выводимого изображения |
Работа с драйверами, режимами |
||
CloseGraph |
Завершение работы в графическом режиме |
|
DetectGraph |
Определение драйвера |
|
GetDriveName |
Выдача имени текущего драйвера |
|
|
|
|
GetGraphMode |
Выдача текущего режима |
|
GetMaxMode |
Выдача максимального номера режима |
|
GetModeName |
Выдача имени графического режима |
|
GetModeRange |
|
|
GraphDefaults |
Восстановление графической системы с параметрами по умолчанию |
|
GraphErrorMsg |
|
|
GraphResult |
|
|
InitGraph |
Инициализация графической системы |
|
InstallUserDriver |
|
|
RegisterBGIDriver |
|
|
RestoreCRTMode |
|
|
SetGraphMode |
Установка системы в графический режим и очистка экрана |
|