Консультация № 173774
27.10.2009, 21:44
0.00 руб.
0 19 1
Уважаемые эксперты! У меня к Вам такой вопрос! Не получается в Паскале задействовать графический режим. Беру даже стандартные программы-примеры из Help, запускаю, и все... Сообщений об ошибках не выдает, просто выбрасывает из Паскаля, и так каждый раз. Модуль Graph, есть и в папке где я компилирую программу, потом EGAVGA.BGI тоже найден. Уже пробовал указывать директорию на него ('C:\BP\BGI'), директорию проверял. Вот например запускал программу из приложения, выбрасывает меня постоянно. В чем может быть причина???

Приложение:
{Пример использования SetBkColor}
Uses Crt, Graph;

Var GraphDriver, GraphMode : Integer;
Palette : PaletteType;

Begin
GraphDriver:=Detect;
InitGraph(GraphDriver, GraphMode,'');
Randomize;
If GraphResult <> grOk Then Halt(1);
GetPalette(Palette);
Repeat
If Palette.Size <> 1 Then SetBkColor(Random(Palette.Size));
LineTo(Random(GetMaxX),Random(GetMaxY));
Until KeyPressed;
CloseGraph;
End.

Обсуждение

Неизвестный
27.10.2009, 22:00
общий
В стандартном примере показано как не просто завершить работу при ошибке, а прочитать ее причину. Полностью скопируйте.
А ошибка, скорее всего, в том, что третьим параметром в InitGraph должен быть полный путь (в DOS-овском формате) к файлу egavga.bgi или он должен находиться в той папке, откуда запускаете программу
Есть, конечно, еще способ ..., но он чуть посложнее и все равно создании EXE должен быть известен путь к этому файлу
Неизвестный
27.10.2009, 22:15
общий
Boriss, в том и дело, что я скопировал файл egavga.bgi в папку, откуда я запускаю программу. Не вышло. Потом пытался сослаться на папку BGI, в которой находится этот файл ( InitGraph(GraphDriver, GraphMode,'C:\BP\BGI'); Тоже не вышло.
Цитата: 422
В стандартном примере показано как не просто завершить работу при ошибке, а прочитать ее причину. Полностью скопируйте.

Я скопировал этотр пример из примера программы для процедуры SetBkColor, я скопировал полностью, это все что было.
давно
Старший Модератор
31795
6196
27.10.2009, 22:39
общий
это ответ
Здравствуйте, Камынин Владислав Дмитриевич.

Код рабочий. Ошибки в нем нет.
Единственное замечание по коду:
err:=GraphResult;
if err=grOk then
begin
. . .
end
else
writeln('graphError',err);
ReadKey;

После этого Вы будете знать номер самой ошибки, а не просто выбрасывает из Паскаля.
Не все компиляторы поставляются с корректными графическими модулями, нормальный модуль Вы найдете URL >> или URL >>
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
27.10.2009, 22:42
общий
Камынин Владислав Дмитриевич:
У меня и egavga.bgi и GRAPH.TPU находились в папке с программой, а сам компилятор в другом месте.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
27.10.2009, 23:13
общий
Пример нужно было взять из InitGraph. Там советуется вот так:
Код:
Else WriteLn('Ошибка инициализации графики:', GraphErrorMsg(ErrCode));

Именно это я и имел в виду.
По поводу замечаний Зенченко: у Вас Borland Pascal 7? Или какой-нибудь лихоимский ABC...?
Неизвестный
27.10.2009, 23:15
общий
Второй вариант - "битый" egavga.bgi (тфу! на ночь такое выговаривать ....). Какой размер Вашего файла в байтах? У меня 5 527 байт.
Неизвестный
28.10.2009, 00:51
общий
Хот и неполучилось(( Все равно спасибо за Ваш Труд, никогда не оставите без внимания )))))))
давно
Мастер-Эксперт
425
4118
28.10.2009, 06:25
общий
Камынин Владислав Дмитриевич:
Надо посмотреть, после какой строки кода выблетает программа.
Во-первых, уберите из строки Uses модуль Crt, чтобы точно знать, что дело не в нём.
Во-вторых, сделайте как Вам посоветовал Константин Николаевич, т.е. поместите egavga.bgi и GRAPH.TPU в папку со своей программой. Тогда можно не указывать путь, который идёт третьим параметром в процедуре InitGraph.
В третьих, если ошибка после этого осталась, то оставьте в своей программе только строку GraphDriver:=Detect;, добавьте второй строкой WriteLn('Работает. Тра-ля-ля...'); и посмотрите, что будет.
Если "Тра-ля-ля" появилось на экране, то прибавляем каждый раз по одной следующей строке и опять смотрим, что будет.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
28.10.2009, 08:19
общий
Проще пошаговое выполнение сделать - F8
давно
Мастер-Эксперт
425
4118
28.10.2009, 08:53
общий
Boriss:
Проще, конечно. Только не известно будет ли оно работать в принципе. Я от ТР в своё время отказался именно из-за непредсказуемости поведения на ОСях типа NT.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
28.10.2009, 09:09
общий
sir Henry:
Аналогично, уж ежели нужно что, так Free, хотя его графическая проблема двух окон - одно кажет, дургое события принимает ....
Вообще-то на фак подписался на MSDN - так что VS 2008
Неизвестный
28.10.2009, 11:38
общий
Boriss:
Добрый день! Тоже решил "поиграться". Не работает. Размер 5527. Пытался запустить программу \Examples\Bgi\BgiDemo.Pas. Говорит, не найден "EgaVga.bgi". Положил рядом с exe-файлом. Тот же результат. WinXP, SP2, Turbo 7.
давно
Старший Модератор
31795
6196
28.10.2009, 14:14
общий
Камынин Владислав Дмитриевич:
Цитата: 273093
Хот и неполучилось


Давайте попорядку.
Переделываем программу в следующую:
Код:
{Пример использования SetBkColor}
Uses Crt, Graph;

Var GraphDriver, GraphMode : Integer;
Palette : PaletteType;

Begin
GraphDriver:=Detect;
InitGraph(GraphDriver, GraphMode,'');
Randomize;
GraphMode:=GraphResult;
If GraphMode = grOk Then
begin
GetPalette(Palette);
Repeat
If Palette.Size <> 1 Then SetBkColor(Random(Palette.Size));
LineTo(Random(GetMaxX),Random(GetMaxY));
Until KeyPressed;
readkey;
CloseGraph;
end
else write('InitError:',GraphMode);
readln;
End.

Номер ошибки какой у Вас?
В ТР7.1, когда в папку BIN перенес Вашу программу и файлы GRAPH.TPU и EGAVGA.BGI из соответствующих папок компилятора( UNITS и BGI ) получил ошибку -3 (не обнаружен файл с драйвером, в данном случае EGAVGA.BGI).
Заменил файл из комплекта ВР_рус- заработало.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.10.2009, 18:03
общий
У меня ХР - работает нормально скопированный пример по InitGraph из помощи.
Неизвестный
30.10.2009, 22:12
общий
Цитата: Вадим Исаев ака sir Henry
Надо посмотреть, после какой строки кода выблетает программа.

Посмотрел, после строки InitGraph(GraphDriver, GraphMode,'');
Цитата: Зенченко Константин Николаевич
Номер ошибки какой у Вас?

В том то и дело что программа не завершается и выбрасывает из Паскаля, тоесть никакого вывода на экран нету, просто выкидывает меня и все никакого сообщения про ошибку не увидишь.
Цитата: Зенченко Константин Николаевич
Заменил файл из комплекта ВР_рус- заработало.

Пробовал Evagva.bgi и с этого комплекта, не получается.
Неизвестный
30.10.2009, 23:33
общий
1) Уберите потенциально опасный CRT (не знали создатели Borland Pascal тогда, когда создавали его, что появятся машины с разрядностью больше 16 - от того и допустили ляп).
2) С примером из InitGraph.pas тоже самое?
3) Опишите Вашу машину и ОС (поищем у себя подобную, чтобы проверить).
4) Переходите на FreePascal. Но и там больших благ не ожидайте - одна из трудностей в том, что в окне с графическим окном программа выполяется, а события от клавиатуры принимает другое текстовое черное окно.
Неизвестный
31.10.2009, 00:24
общий
Цитата: 422
примером из InitGraph.pas тоже самое?

Да, я проверил и InitGraph.pas и этот тоже проверил
Цитата: 300647
\Examples\Bgi\BgiDemo.Pas.

но не выходит, пока файл EGAVGA.BGI не найден, то не выбрасывает и выводит на экран ошибку InitError:-3, когда копирую файл EGAVGA.BGI в папку BIN (там у меня мои программы на Паскале), выбрасывает после строчки InitGraph(GraphDriver, GraphMode,'');
Цитата: 422
Опишите Вашу машину и ОС (поищем у себя подобную, чтобы проверить).

К сожалению, не очень разбираюсь в компьютерах, поэтому не знаю достаточно ли этой информации?

Цитата: 422
Переходите на FreePascal

C Frre Pascal не знаком, но обещаю исправиться
давно
Мастер-Эксперт
425
4118
31.10.2009, 06:19
общий
Камынин Владислав Дмитриевич:
C Frre Pascal не знаком, но обещаю исправиться

Скачать можно по этой ссылке:
fpc-2.2.4.i386-win32.exe
Положительные стороны, по сравнению с ТР7:
- Разработан специально для корректной работы в Windows.
- Имеет такую же оболочку, что и TurboPascal. Запускается - fp.exe
- Бесплатный.
- Если захотите расстаться с Windows (например, лень покупать лицензию ), то для других операционных систем (Linux, MacOS, FreeBSD, Sparc,...) версии FreePascal тоже существуют...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
31.10.2009, 13:43
общий
Да, уже познакомился, там все получилось. СПАСИБО!!!
Форма ответа