СообЧа > База Знаний > Программирование > Pascal

Вопрос

Не работает модуль Graph. В опциях>>директории стоит адрес Units. В теле программы пишу

program sed;
uses graph;
var
d,m:integer;
begin
initgraph(d,m,'D:\tp\bgi');
d:=detect;
readln;
bar(0,0,5,5);
closegraph;
readln;
end.

Выдает типа «Графический режим не инициализирован». Из-за чего это?

Ответ

Во-первых, необходимо определиться с видом графического адаптера и графическим режимом . Как раз именно это и делает система автоматически в момент присвоения переменной d (d:=detect). Поэтому это присвоение должно стоять перед вызовом процедуры InitGraph.

Во-вторых, нужно убедиться, что правильно указан путь к BGI-драйверам в параметрах процедуры инициализации InitGraph.

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

С учетом всех предыдущих условий, я бы рекомендовал такою процедуру, которая пытается инициализировать графический режим и, в случае ошибки, выводит текст последней:

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;
END;


Описав эту процедуру (можно ее доработать на предмет пути к BGI-драйверам), можно к ней обращаться когда нужно инициализировать графический режим. Тогда ваш код будет выглядеть приблизительно так:

program sed;
uses graph;
procedure GrInit;
VAR graphDriver : integer; GraphMode : integer;
ErrorCode : integer;
BEGIN GraphDriver:=Detect;
InitGraph(GraphDriver,GraphMode,'D:\tp\bgi');
ErrorCode:=GraphResult;
if ErrorCode <> grOk then begin writeln('Ошибка графики: ',GraphErrorMsg(ErrorCode));
writeln('Программа остановлена. ');
halt(1);
end;
END;
BEGIN GrInit;
{Попытка инициализировать графический режим} SetColor(14);
{цвет пера — желтый} SetBkColor(1);
{цвет фона — синий} For Radius:=1 To 5 Do Circle(100, 100, Radius * 10);
{рисуем круги} closegraph;
readln;
end.


Существует возможность внедрить определенный BGI-драйвер в ЕХЕ-файл, тогда не нужно будет «таскать с программой» файл BGI (впрочем, как и необходимые шрифты).

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация