Реферат: Модуль Graph в программе Turbo Pascal
Uses Graph;
Procedure GrInit;
Var
GraphDriver: Integer;
GraphMode: Integer;
ErrorCode: Integer;
Begin
GraphDriver: =Detect;
InitGraph (GraphDriver, GraphMode, '');
ErrorCode: =GraphResult;
if ErrorCode <> grOK then
begin
Writeln (‘Ошибка графики: ‘, GraphErrorMsg (ErrorCode));
Writeln(‘Программа остановлена...');
Halt(1);
end;
Begin {Пример инициализации}
GrInit;
Line (0, 0, GetMaxX, GetMaxY);
Readln;
CloseGraph;
End.
В дальнейшем процедуру Grlnit лучше записать в отдельный файл (например, INITGRAF.PAS) и использовать директиву включения этого файла при компиляции. Такой блок всегда включает стандартный графический режим максимального разрешения.
Классификация и анализ графических режимов
Возможные графические режимы для различных адаптеров приведены в таблице. Во втором столбце приведены имена предопределенных констант, которые можно передавать в процедуры, управляющие графическими режимами. Последний столбец показывает количество полноэкранных изображений, которые могут храниться в памяти видеоадаптера одновременно.
Драйвер | Имя константы режима и ее значение | Разрешение экрана (в точках) | Палитра | Число видеостраниц |
CGA | CGAC0 = 0 | 320x200 | 4 цвета | 1 |
CGAC1 = 1 | 320x200 | 4 цвета | 1 | |
CGAC2 = 2 | 320x200 | 4 цвета | 1 | |
CGAC3 = 3 | 320x200 | 4 цвета | 1 | |
CGAHi = 4 | 640x200 | 2 цвета | 1 | |
MCGA | MCGAC0 = 0 | 320x200 | 4 цвета | 1 |
MCGAC1 = 1 | 320x200 | 4 цвета | 1 | |
MCGAC2 = 2 | 320x200 | 4 цвета | 1 | |
MCGAC3 = 3 | 320x200 | 4 цвета | 1 | |
MCGAMed= 4 | 640x200 | 2 цвета | 1 | |
MCGAHi = 5 | 640x480 | 2 цвета | 1 | |
EGA | EGALo = 0 | 640x200 | 16 цветов | 4 |
EGAHi = 1 | 640x350 | 16 цветов | 2 | |
EGA64 | EGA64Lo = 0 | 640x200 | 16 цветов | 1 |
EGA64Hi = 1 | 640x350 | 4 цвета | 1 | |
EGAMono | EGAMonoHi = 3 | 640x350 | 2 цвета | 1(2) |
Herc | HercMonoHi = 0 | 720x348 | 2 цвета | 2 |
АТТ | АТТ400С0 = 0 | 320x200 | 4 цвета | 1 |
АТТ400С1 = 1 | 320x200 | 4 цвета | 1 | |
АТТ400С2 = 2 | 320x200 | 4 цвета | 1 | |
АТТ400СЗ = 3 | 320x200 | 4 цвета | 1 | |
ATT400Med = 4 | 640x200 | 2 цвета | 1 | |
АТТ400Нi= 5 | 640x400 | 2 цвета | 1 | |
VGA | VGALo = 0 | 640x200 | 16 цветов | 4 |
VGAMed = 1 | 640x350 | 16 цветов | 2 | |
VGAHi = 2 | 640x480 | 16 цветов | 1 | |
PC3270 | PC3270Hi = 0 | 720x350 | 2 цвета | 1 |
IBM8514 | IBM8514Lo = 0 | 640x480 | 256 цветов | 1 |
IBM8514= 1 | 1024x768 | 256 цветов | 1 |
Для того чтобы полностью использовать возможности установленного в ПК адаптера, необходимо воспользоваться инструкцией по работе с ним.
Процедура DetectGraph. Для тестирования графического адаптера в модуле Graph объявлена процедура:
DetectGraph (VAR GraphDriver, GraphMode: Integer)
Эта процедура может быть вызвана до инициализации графики. Через формальный параметр GraphDriver возвращается значение из первого столбца таблицы указанной выше таблицы, а через параметр GraphMode - обычно последнее значение из соответствующего раздела второго столбца. Эти значения и рекомендуется подставлять в качестве фактических параметров в процедуру InitGraph. После определения GraphDriver автоматически становится доступным диапазон графических режимов, реализуемых адаптером
Существует возможность манипуляции режимами работы графического адаптера - при помощи группы процедур и функций, но уже после инициализации графики. Но часто бывает важным сначала определить разрешенные значения режимов.
Диапазоны графических режимов. Номер текущего графического режима для установленного драйвера определяется функцией
GetGraphMode: Integer,
Функция
GetMaxMode: Word
возвращает номер максимального режима для графического адаптера; таким образом, каждый драйвер поддерживает диапазон режимов 0...GetMaxMode. Обычно этот же результат можно получить из процедуры
GetModeRange (GraphDriver: Integer; VAR LoMode, HiMode: Integer),
через параметры LoMode и HiMode, возвращающей соответственно нижнюю и верхнюю границу режимов для драйвера GraphDriver. Но по ряду технических соображений предпочтительнее пользоваться функцией GetMaxMode, полагая минимальный номер режима равным нулю.
Функции GetModeName и GetDriverName.
GetModeName (GraphMode: Word): String. Функция возвращает строку, в которой содержится последовательно через пробелы разрешение, имя константы и иногда название палитры, например, '640x200 CGA'. Представленный пример поможет определить, в каких графических режимах может работать используемая ПЭВМ.
USES Graph; | {подключен модуль Graph} |
{$I initgraf.pas} | { процедура инициализации} |
VAR | |
mode: Integer; | |
BEGIN | |
Grlnit; | { инициализация} |
for mode := 0 to GetMaxMode do | { показ всех режимов } |
OutTextXY(10, 10+mode*10, GetModeName( mode ) ); | |
ReadLn; | { пауза до нажатия...} |
CloseGraph | { закрытие графики} |
END. |
Функция GetDriverName: String позволяет получить имя используемого драйвера. Ее применение обосновано только в том случае, если в процедуре InitGraph переменная GraphDriver определена, как Detect.
Очистка экрана и переключение режимов
Очистка графического экрана. Две следующие процедуры выполняют почти одинаковые действия, только первая из них является как бы подмножеством второй:
ClearDevice
Эта процедура очищает графический экран и устанавливает указатель позиции в (0, 0), а процедура
GraphDefaults кроме очистки экрана устанавливает ряд параметров графической системы:
o графическое окно становится равным размеру экрана;
o восстанавливается системная цветовая палитра;
o переназначаются цвета основных линий и фона экрана;
o толщина и стиль линий принимаются как по умолчанию;
o цвет и шаблон заливки геометрических фигур и замкнутых ломаных принимается как по умолчанию;
o переустанавливается активный шрифт и его стиль.
Процедура GraphDefaults неявно вызывается при инициализации графики и выполняет, no-сути, все стартовые установки графических параметров.
Переключение режимов. Оно осуществляется процедурой SetGraphMode ( GraphMode: Integer)
Процедура переключает систему в указанный параметром GraphMode режим и очищает экран монитора. При этом все характеристики устанавливаются по умолчанию. Такие переключения возможны только в рамках текущего драйвера.
Процедура RestoreCRTMode. При написании некоторых пакетов, использующих и графические, и текстовые режимы работы, может использоваться процедура RestoreCRTMode, которая возвращает систему в текстовый режим, работавший до инициализации графики. Казалось бы, уже есть процедура с подобным действием — CloseGraph. Однако после нее возврат в графический режим должен проводиться через процедуру InitGraph, что довольно сложно. Если же воспользоваться процедурой RestoreCRTMode, то возвращение в графику будет достаточно простым
USES Graph; | {подключен модуль Graph} | |
{$I Initgraf.pas} | {процедура инициализации} | |
CONST | {константы - сообщения} | |
graph_str = ‘Это графический режим'; | ||
text_str = 'А это текстовый режим'; | ||
graph_ back = 'А это снова графический режим'; | ||
BEGIN | ||
Grlnit; | {инициализация графики} | |
Line(0,0,GetMaxX,GetMaxY }; | { диагональ экрана} | |
OutTextXY(0,100,graph_str); | { вывод первого сообщения} | |
ReadLn; | {пауза до нажатия ввода} | |
RestoreCRTMode; | {восстановление текстового режима} | |
Write{ text_str ); | { вывод второго сообщения} | |
ReadLn; | {пауза до нажатия ввода} | |
SetGraphMode(GetGraphMode); | {восстановление графического режима} | |
Une(0,0,GetMaxX,GetMaxY); | { диагональ экрана } | |
OutTextXY(0,100,graph_back); | {вывод третьего сообщения} | |
ReadLn; | { пауза до нажатия ввода} | |
CloseGraph | { закрытие графики} | |
End. | ||
Обратное переключение осуществляется при помощи функции GetGraphMode, которая возвращает номер текущего графического режима. При работе RestoreCRTMode выгрузки графического драйвера не происходит, т.е. он остается в памяти активным.