Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Графика и полноэкранный режим

Автор: -Андрей- 20.02.2008 4:53

Дело в том что паскаль работает с unitом crt, но как только подключаю graph - при компиляции он разварачивает паскаль на весь монитор и так оставляет тёмный экран, нажатие alt+enter возвращает в оконный, но окно пустое тёмное и заголовок Turbo Pascal - ЗАФИКСИРОВАНО.


EGAVGA.BGI - в папке bgi

директорию прописал

винда 2к



Begin
grdriver:=detect;


Initgraph(grdriver,grmode,'c:\bp\b

gi\');
restoreCRTMode;

Автор: andriano 20.02.2008 12:52

В общем-то так и должно быть.
Не понял, в чем проблема.

Автор: spill 20.02.2008 16:12

По идее, такого быть не должно.
Он должен перейти в графический режим, сразу же из него выйти и закончить программу.
Попробуй вот что:
1. Порисуй там че-нибудь, или поставь ReadKey (модуль CRT). Если получилось нарисовать, то все в порядке
2. Поместить EGAVGA.BGI в папку с программой
3. Вместо

Код
grdriver:=detect;

Написать
Код

grdriver:=VGA;
grmode:=VGAHi

Может, заработает

Автор: volvo 20.02.2008 16:31

Цитата
Он должен перейти в графический режим, сразу же из него выйти и закончить программу.
Это у тебя телепатические способности, или просто тяга к некорректным выводам? Ты что, видел ВСЮ программу, чтобы уверенно рассуждать, что должно быть, а что нет? Все, что следует из поста - это то, что после инициализации графики автор временно возвращается в текстовый режим. Что он там делает - неизвестно, поэтому домыслы свои оставляй при себе...

Автор: spill 20.02.2008 16:43

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

Автор: Андрей by minsk 20.02.2008 22:45

Код
grdriver:=VGA;
grmode:=VGAHi

не помогло, боюсь что Turbo pascal использует в win2k файл ntvdm.exe, а он у меня какой-нить битый, хотя почему без graph нормально работает не понимаю.

установил Free pascal, компилируется, но выскакивает два окна в одном нарисован лабиринт в другом предлогает выбрать стартовую точку. по идеи после выбора места, при нажатии любой клавиши или enter должна рисоваться линия, как идёт человек, но ничего не происходит




вот исходник
Код
Program Laba1;
uses crt,graph;
var
  floor,place,driver,mode,x,y,i : integer;
Procedure lifts_and_stairway;
Begin
  rectangle(410,120,430,140);
  rectangle(170,360,190,380);
  rectangle(150,100,155,105);
  rectangle(150,100,160,110);
  rectangle(150,100,165,115);
  outtextxy(195,360,'first lift');
  outtextxy(320,130,'second lift');
  outtextxy(150,90,'stairway')
End;
Procedure street_floor;
Begin
  SetBkcolor(cyan);
  line(150,100,450,100);
  line(450,100,450,400);
  line(450,400,320,400);
  line(280,400,150,400);
  line(150,400,150,100);
  line(170,120,430,120);
  line(430,120,430,200);
  line(430,210,430,380);
  line(430,195,410,195);
  line(410,195,410,215);
  line(410,215,430,215);
  line(430,380,170,380);
  line(170,380,170,120);
  lifts_and_stairway;
  outtextxy(370,200,'room');
End;
Procedure first_floor;
Begin
  SetBkcolor(blue);
  rectangle(150,100,450,400);
  line(170,120,250,120);
  line(260,120,430,120);
  line(245,120,245,135);
  line(245,135,265,135);
  line(265,135,265,120);
  line(430,120,430,380);
  line(430,380,360,380);
  line(330,380,170,380);
  line(365,380,365,340);
  line(365,340,325,340);
  line(325,340,325,380);
  line(170,380,170,300);
  line(170,280,170,120);
  line(170,320,230,320);
  line(230,320,230,260);
  line(230,260,170,260);
  lifts_and_stairway;
  outtextxy(290,330,'room with diaf');
  outtextxy(240,280,'poin of management');
  outtextxy(180,140,'laboratory')
End;
Procedure second_floor;
Begin
  SetBkcolor(green);
  rectangle(150,100,450,400);
  line(170,120,430,120);
  line(430,120,430,300);
  line(430,310,430,380);
  line(430,295,420,295);
  line(420,295,420,315);
  line(420,315,430,315);
  line(430,380,170,380);
  line(170,380,170,190);
  line(170,170,170,120);
  line(170,200,210,200);
  line(210,200,210,160);
  line(210,160,170,160);
  lifts_and_stairway;
  outtextxy(220,180,'medical laboratory');
  outtextxy(370,300,'hutch')
End;
Procedure exit_first_lift;
Begin
  street_floor;
  i := 179;
  for x := 180 to 190 do
  begin
    putpixel(x,380,cyan);
    putpixel(i,380,cyan);
    dec(i);
    delay(10000)
  end;
  for y := 370 to 390 do
  begin
    putpixel(180,y,red);
    delay(10000)
  end;
  i:= 170;
  for x := 190 downto 180 do
  begin
    putpixel(x,380,white);
    putpixel(i,380,white);
    inc(i);
    delay(10000)
  end;
  for x := 180 to 300 do
  begin
    putpixel(x,390,red);
    delay(10000)
  end
End;
Procedure lift;
Begin
  clrscr;
  gotoxy(20,25);
  writeln(i);
  delay(65535);
  delay(65535);
  delay(65535);
  delay(65535)
End;
Begin
  clrscr;
  driver := detect;
  initgraph(driver,mode,'c:\bp\bgi\');
  restoreCRTMode;

  {---}

  textcolor(magenta);
  writeln('choose floor on which you are found');
  writeln;
  textcolor(white);
  writeln('1. street floor - cyan');
  writeln('2. first floor - blue');
  writeln('3. second floor - green');
  writeln;
  readln(floor);
  clrscr;
  textcolor(magenta);
  writeln('choose place where you are found');
  writeln;

  {---}

  textcolor(white);
  case floor of
    1 : begin
          writeln('1. room');
          writeln;
          readln(place);
          SetGraphMode(GetGraphMode);
          street_floor;
          if place = 1 then
          begin
            outtextxy(422,201,'x');
            readkey;
            for x := 425 to 440 do
            begin
              putpixel(x,205,red);
              delay(10000)
            end;
            for y := 205 to 390 do
            begin
              putpixel(440,y,red);
              delay(10000)
            end;
            for x := 440 downto 300 do
            begin
              putpixel(x,390,red);
              delay(10000)
            end
          end
        end;
    2 : begin
          writeln('1. room with deaf');
          writeln('2. point of management');
          writeln('3. laboratory');
          writeln;
          readln(place);
          SetGraphMode(GetGraphMode);
          first_floor;
          case place of
            1 : begin
                  outtextxy(342,356,'x');
                  readkey;
                  for y := 360 to 390 do
                  begin
                    putpixel(345,y,red);
                    delay(10000)
                  end;
                  for x := 345 downto 180 do
                  begin
                    putpixel(x,390,red);
                    delay(10000)
                  end;
                  i := 179;
                  for x := 180 to 190 do
                  begin
                    putpixel(x,380,blue);
                    putpixel(i,380,blue);
                    dec(i);
                    delay(10000)
                  end;
                  for y := 390 downto 370 do
                  begin
                    putpixel(180,y,red);
                    delay(10000)
                  end;
                  i := 170;
                  for x := 190 downto 180 do
                  begin
                    putpixel(x,380,white);
                    putpixel(i,380,white);
                    inc(i);
                    delay(10000)
                  end;
                  TextMode(Font8x8);
                  for i := 2 downto 1 do
                    lift;
                  clrscr;
                  SetGraphMode(GetGraphMode);
                  exit_first_lift;
                end;
            2 : begin
                  outtextxy(197,286,'x');
                  readkey;
                  for x := 200 downto 160 do
                  begin
                    putpixel(x,290,red);
                    delay(10000)
                  end;
                  for y := 290 to 370 do
                  begin
                    putpixel(160,y,red);
                    delay(10000)
                  end;
                  i := 371;
                  for y := 370 downto 360 do
                  begin
                    putpixel(170,y,blue);
                    putpixel(170,i,blue);
                    inc(i);
                    delay(10000)
                  end;
                  for x := 160 to 180 do
                  begin
                    putpixel(x,370,red);
                    delay(10000)
                  end;
                  i:= 380;
                  for y := 360 to 370 do
                  begin
                    putpixel(170,y,white);
                    putpixel(170,i,white);
                    dec(i);
                    delay(10000)
                  end;
                  clrscr;
                  TextMode(Font8x8);
                  for i := 2 downto 1 do
                    lift;
                  SetGraphMode(GetGraphMode);
                  exit_first_lift;
                end;
            3 : begin
                  outtextxy(252,121,'x');
                  readkey;
                  for y := 125 downto 110 do
                  begin
                    putpixel(255,y,red);
                    delay(10000)
                  end;
                  for x := 255 downto 160 do
                  begin
                    putpixel(x,110,red);
                    delay(10000)
                  end;
                  y := 110;
                  for x := 160 to 165 do
                  begin
                    putpixel(x,y,red);
                    inc(y);
                    delay(10000)
                  end;
                  clrscr;
                  TextMode(Font8x8);
                  for i := 2 downto 1 do
                    lift;
                  SetGraphMode(GetGraphMode);
                  street_floor;
                  y := 100;
                  for x := 150 to 160 do
                  begin
                    putpixel(x,y,red);
                    inc(y);
                    delay(10000)
                  end;
                  for y := 110 to 390 do
                  begin
                    putpixel(160,y,red);
                    delay(10000)
                  end;
                  for x := 160 to 300 do
                  begin
                    putpixel(x,390,red);
                    delay(10000)
                  end
                end
          end
        end;
    3 : begin
          writeln('1. medical laboratory');
          writeln('2. hutch');
          writeln;
          readln(place);
          SetGraphMode(GetGraphMode);
          second_floor;
          case place of
            1 : begin
                  outtextxy(187,176,'x');
                  readkey;
                  for x := 190 downto 160 do
                  begin
                    putpixel(x,180,red);
                    delay(10000)
                  end;
                  for y := 180 to 370 do
                  begin
                    putpixel(160,y,red);
                    delay(10000)
                  end;
                  i := 371;
                  for y := 370 downto 360 do
                  begin
                    putpixel(170,y,green);
                    putpixel(170,i,green);
                    inc(i);
                    delay(10000)
                  end;
                  for x := 160 to 180 do
                  begin
                    putpixel(x,370,red);
                    delay(10000)
                  end;
                  i:= 380;
                  for y := 360 to 370 do
                  begin
                    putpixel(170,y,white);
                    putpixel(170,i,white);
                    dec(i);
                    delay(10000)
                  end;
                  clrscr;
                  TextMode(Font8x8);
                  for i := 3 downto 1 do
                    lift;
                  SetGraphMode(GetGraphMode);
                  exit_first_lift
                end;
            2 : begin
                  outtextxy(422,301,'x');
                  readkey;
                  for x := 425 to 440 do
                  begin
                    putpixel(x,305,red);
                    delay(10000)
                  end;
                  for y := 305 downto 130 do
                  begin
                    putpixel(440,y,red);
                    delay(10000)
                  end;
                  i := 129;
                  for y := 130 to 140 do
                  begin
                    putpixel(430,y,green);
                    putpixel(430,i,green);
                    dec(i);
                    delay(10000)
                  end;
                  for x := 440 downto 420 do
                  begin
                    putpixel(x,130,red);
                    delay(10000)
                  end;
                  i:= 120;
                  for y := 140 downto 130 do
                  begin
                    putpixel(430,y,white);
                    putpixel(430,i,white);
                    inc(i);
                    delay(10000)
                  end;
                  clrscr;
                  TextMode(Font8x8);
                  for i := 3 downto 1 do
                    lift;
                  SetGraphMode(GetGraphMode);
                  street_floor;
                  i := 129;
                  for y := 130 to 140 do
                  begin
                    putpixel(430,y,cyan);
                    putpixel(430,i,cyan);
                    dec(i);
                    delay(10000)
                  end;
                  for x := 420 to 440 do
                  begin
                    putpixel(x,130,red);
                    delay(10000)
                  end;
                  i:= 120;
                  for y := 140 downto 130 do
                  begin
                    putpixel(430,y,white);
                    putpixel(430,i,white);
                    inc(i);
                    delay(10000)
                  end;
                  for y := 130 to 390 do
                  begin
                    putpixel(440,y,red);
                    delay(10000)
                  end;
                  for x := 440 downto 300 do
                  begin
                    putpixel(x,390,red);
                    delay(10000)
                  end;
                end
          end
        end
  end;
  for y := 390 to 410 do
  begin
    putpixel(300,y,red);
    delay(10000);
  end;
  readkey
End.


Добавлено через 5 мин.
простейшая вещь:
в турбо паскале не пашет sad.gif
Код
Begin
  clrscr;
  driver := detect;
  initgraph(driver,mode,'c:\bp\bgi\');
  rectangle(410,120,430,140);
  rectangle(170,360,190,380);
  rectangle(150,100,155,105);
  rectangle(150,100,160,110);
  delay(10000);
  readkey
End.

Автор: Ozzя 21.02.2008 13:13

Цитата
установил Free pascal, компилируется, но выскакивает два окна в одном нарисован лабиринт в другом предлогает выбрать стартовую точку. по идеи после выбора места, при нажатии любой клавиши или enter должна рисоваться линия, как идёт человек, но ничего не происходит


{$APPTYPE GUI}