Graph в Free Pascal-е.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Graph в Free Pascal-е.

Сообщение Sersaf » 16.05.2009 14:18:23

У меня не работает модуль Graph. Вылезает графический режим и на нем ничего не появляется. В турбо паскале программа запускается на несколько секунд и выключается(но все равно на экран ничего не выводится).
Код программы
Код: Выделить всё
uses Graph,Crt;
var gd,gm:integer;
begin
ClrScr;
gd:=detect;
initGraph(gd,gm,'');
if graphresult <> grok then halt(1);
setcolor (random(15));
bar (40,40,50,60);
readln;
closeGraph;
end.

В чем дело?
Sersaf
незнакомец
 
Сообщения: 4
Зарегистрирован: 16.05.2009 13:57:41

Re: Graph в Free Pascal-е.

Сообщение Vadim » 16.05.2009 17:18:05

1. А Вы уверены, что у Вас включается графический режим? Это нужно проверить:
Код: Выделить всё
Var
  ...
  grResult: Integer;
  ...
Begin
  ...
  grResult:=GraphResult;
  If grResult<>grOk Then
  Begin
     WriteLn('Ошибка - ', GraphErrorMsg(grResult));
     ReadLn;
     Halt(1);
  End;
End.

2. Вот про эту штуку:
Код: Выделить всё
gd:=detect;

забудьте навсегда. По умолчанию FreePascal детектирует максимально возможный режим для видеокарты, вот только 99% даю на то, что Вашему дисплею такой режим не под силу. Графический драйвер и графический режим задавайте в явном виде и только те, что гарантированно поддерживает Ваш дисплей.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Graph в Free Pascal-е.

Сообщение Mr.Smart » 16.05.2009 19:37:58

Мне больше всего ненравится вот эта строчка
Код: Выделить всё
...
setcolor (random(15));
...

где инициализация генератора случайных чисел? Нет уверенности, что функция выдаёт значения отличные от 0 (чёрный цвет)!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Graph в Free Pascal-е.

Сообщение Sersaf » 17.05.2009 12:49:59

to Vadim:
сделал, но эффект тот же самый.

to Mr.Smart:
до недоглядел. но проблеиы это всеравно не меняет. даже если выставить цвет вручную, изображение не появляется.
Sersaf
незнакомец
 
Сообщения: 4
Зарегистрирован: 16.05.2009 13:57:41

Re: Graph в Free Pascal-е.

Сообщение Vadim » 17.05.2009 12:55:01

Sersaf
1. Ваша операционная система?
2. Версия FreePascal?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Graph в Free Pascal-е.

Сообщение Sersaf » 17.05.2009 13:06:31

Windows XP SP3.
2.2.4
Sersaf
незнакомец
 
Сообщения: 4
Зарегистрирован: 16.05.2009 13:57:41

Re: Graph в Free Pascal-е.

Сообщение Vadim » 17.05.2009 13:18:32

Sersaf
А вот это попробуйте:
Код: Выделить всё
uses Graph,Crt;
var
  gd,gm: smallint;
begin
  Randomize;
  ClrScr;
  gd:=D4bit;
  gm:=m800x600;
  initGraph(gd,gm,'');
  if graphresult <> grok then halt(1);
  setcolor (random(15));
  bar (40,40,500,400);
  readln;
  closeGraph;
end.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Graph в Free Pascal-е.

Сообщение Sersaf » 17.05.2009 14:08:33

В графическом режиме нарисовался прямоугольник. Значит что-то я не так делал.
Sersaf
незнакомец
 
Сообщения: 4
Зарегистрирован: 16.05.2009 13:57:41

Re: Graph в Free Pascal-е.

Сообщение Vadim » 17.05.2009 15:27:37

Sersaf
Всё с Вами понятно. :)
Простите, голубчик, это я виноват. Я Вам рассказал о взаимодействии графического режима с дисплеем, но ничего не сказал о взаимодействии графического режима с Вашими глазами.
Если посмотреть в документации на процедуру SetColor(), то увидим, что аргументом ей задаётся значение типа Word, т.е. 65 000 цветов. И если Ваш цветовой режим выставлен как D8Bit, т. е. из расчёта на воспроизведение этого количества цветов, то Вы не только не отличите цвет № 14 от цвета № 15, но и цвет № 0 (угольно-чёрный) от цвета № 15 (который у Вас задан как максимальный).
В демо-примере я ограничил количество цветов 4-мя битами, т.е. 16-ю цветами и теперь, ограничив значение задаваемого цвета 16-ю значениями, мы будем получать для каждого соседнего значения более резкую градацию цвета.
Вот, смотрите:
Код: Выделить всё
uses Graph, Windows;
var
  gd,gm: smallint;
  i: Integer;
  s: ShortString;
begin
  gd:=D4bit;
  gm:=m800x600;
  initGraph(gd,gm,'');
  if graphresult <> grok then halt(1);
 
  For i:=15 DownTo 0 Do
  Begin
    SetFillStyle(SolidFill, i);
    MoveTo(700, 20);
    Str(i, s);
    OutText('Color N '+s);
    bar(40,40,500,400);
    Sleep(750);
    ClearDevice;
    Sleep(100);
  End;
  closeGraph;
end.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

Рейтинг@Mail.ru