- •Введение
- •Управление экраном в текстовом режиме
- •Установка текстового режима
- •Установка цвета и фона
- •Управление курсором.
- •Управление строками.
- •Управление звуком.
- •Текстовые окна.
- •Использование клавиатуры.
- •Организация меню пользователя. Элементы псевдографики.
- •Виды меню
- •Использование буфера экрана.
- •Управление экраном в графическом режиме.
- •Стандартные подпрограммы для работы в графическом режиме
- •Установка графического режима.
- •InitGraph (var Driver,Mode:integer; DriverPath:string) -
- •Координаты, графические окна.
- •Выбор цвета, стиля заполнения.
- •Геометрия
- •Точки и линии.
- •Многоугольники
- •Дуги, окружности, эллипсы
- •Вывод текста
- •Сохранение и выдача изображений
- •Дополнительные стандартные подпрограммы для работы в графическом режиме. Анализ графического режима
- •Установки графических окон, страницы
- •Выбор палитры, заполнения
- •Геометрия
- •Установки вывода текста.
- •Организация библиотек пользователя
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Приложение 1. Кодировочная таблица пэвм.
- •Приложение 2. Константы графического режима.
Дополнительные стандартные подпрограммы для работы в графическом режиме. Анализ графического режима
В модуле Graph.tpu определен ряд подпрограмм, с помощью которых пользователь может получить информацию о текущих установках графического режима работы.
Процедура DetectGraph(var Driver,Mode:integer) определяет значения драйвера и режима, которые потом могут быть переданы в InitGraph. Если графическая аппаратура не найдена будет зафиксирована ошибка графики grNotDetected. После определения DetectGraph становится доступный диапазон графических режимов, поддерживаемых адаптером ПЭВМ, т.о. имея например апаптер VGA можно установить все режимы на платах CGA,EGA и т.д., т.е более "нижние" режимы.
Данную процедуру вызывает процедура InitGraph при инициализации графики. Вызов DetectGraph используется в случае замены выбираемого драйвера.
Пример.
Uses Graph;
Var Driver,Mode:integer;
Begin
DetectGraph(Driver,Mode);
if (Driver=Ega) or (Driver=Vga)
then begin
Driver:=Cga;
Mode:=0
end;
InitGraph(Driver,Mode,'c:\bin\tp\bgi');
Line(0,0,GetMaxX,GetMaxY)
End.
Функция GetDriverName:string определяет имя текущего графического драйвера.
Процедура GetModeRange(Driver, var LoMode,HiMode:integer) определяет минимальное и максимальное значение графического режима для данного устройства.
Пример.
Uses Graph;
Var LoMode,HiMode:integer;
Begin
writeln(' Адаптер минимальный максимальный ');
GetModeRange(Cga,LoMode,HiMode);
writeln(Cga:5,LoMode:10,HiMode:10);
End.
Функция GetGraphMode:integer определяет номер установленного графического режима.
Функция GetMaxMode:word определяет номер максимально возможного графического режима .
Функция GetModeName(ModeNumber:word):string определяет название графического режима, номер которого ModeNumber.
Пример.
Uses Graph;
Var Driver,Mode:integer;
i:integer;
Begin
Driver:=cga; Mode:=0;
InitGraph(Driver,Mode,'');
for i:=1 to GetMaxMode do
{ вывод названий всех графический режимов }
OutTextXY(10,10*Succ(i),GetModeName(i));
readln;
CloseGraph
End.
Процедура GraphDefaults помещает курсор в (0,0) и сбрасывает все графические параметры системы в установленные по умолчанию :
окна ( весь экран )
палитры ( установленная для текущего графического режима )
цвета фона( черный ) и пикселя ( максимальный цвет в палитре)
стиля и образца линии ( сплошная линия нормальной толщины)
стиля, цвета и образца заполнения ( сплошной шаблон с максимальным цветом в палитре )
стиля и выравнивания текста ( вывод текста по горизонтали от текущего указателя)
шрифта и размера символов ( стандартные )
Вызов данной процедуры неявно происходит при инициализации графики процедурой InitGraph.
Установки графических окон, страницы
В любой момент работы можно получить установки текущего графического окна процедурой:
GetViewSettings(var Viewport : ViewPortType), которая возвращает координаты текущего окна и установку отсечения в переменной типа ViewPortType, определенного в модуле как:
type
ViewPortType=record { абсолютные }
x1,y1,x2,y2:integer; { координаты окна}
clip:boolean { отсечение }
end;
Пример.
Uses Graph;
Var Driver,Mode:integer;
ViewPort:ViewPortType;
Begin
Driver:= Detect;
InitGraph (Driver, Mode,'c:\bin\tp');
if GraphResult=0 then
begin
GetViewSettings(ViewPort);
with ViewPort do
begin
Rectangle(0,0,x2-x1,y2-y1);
if clip then writeln(' отсечка - да ')
else writeln(' отсечка - нет ')
end
readln;
CloseGraph
end
End.
Напомним, что видеопамять дисплея разделена на страницы, каждая из которых задается своим номером. При использовании нескольких графический страниц пользователь может направлять графический вывод в страницу, не выводимую в данный момент, а затем сделать эту страницу видимой. Данная последовательность действий используется при "оживлении" изображения.
В модуле Graph страничную организацию обеспечивают процедуры:
SetActivPage(N:word) - устанавливает активной страницу с номером N, поэтому весь графический вывод с этого момента будет направлен в нее.
SetVisualPage(N:word) - делает активной страницу с номером N.
Адаптер CGA многостраничный режим работы не поддерживает.
Пример.
Программа выводит в невидимую страницу 0 квадрат, а затем делает ее видимой , а в невидимой 1 рисует окружность и делает уже ее видимой.
Uses Graph;
Var Driver,Mode:integer;
Begin
Driver:= Detect;
InitGraph (Driver, Mode,'c:\bin\tp');
if GraphResult=0 then
begin
SetGraphMode(0);
SetActivePage(1);
Rectangle(0,0,GetMaxX div 2,GetMaxY div 2);
SetVisualPage(1);
SetActivePage(0);
Circle(GetMaxX div 2,GetMaxY div 2,100);
SetVisualPage(0);
readln;
CloseGraph
end
End.