Помощь - Поиск - Пользователи - Календарь
Полная версия: Объясните как реализовать выход из процедуры обратно в меню
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Andrewshkovskii
Необходимо оформить программу следующим образом :
Есть главное меню,выбирает из меню нужный нам пункт,выполняется процедура,после чего ДОЛЖНО все вернутся обратно в меню для выбора следующего пункта
вот листинги модуля и гл. программы :
 unit unit1;
 interface
  procedure vivod;
 implementation
  uses graph,crt;
  var
   gd,gm,a,b,i,k:integer;
  const
   f:fillpatterntype= ($f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7);
 procedure vivod;
  begin
   a:=0;
   b:=0;
   settextjustify(2,2);
   settextstyle(1,0,4);
   outtextxy(600,5,'WORK MODULE GRAPH');
   settextjustify(2,2);
   settextstyle(1,0,3);
   outtextxy(500,30,'Case of Shtrih');
   settextjustify(lefttext,toptext);
   settextstyle(0,0,0);
   for i:=0 to 5 do
    begin
     setfillstyle(i,blue);
     arc(120+a,90+b,210,150,15);
     line(120+a,90+b,108+a,83+b);
     line(120+a,90+b,108+a,98+b);
     floodfill(128+a,90+b,white);
     a:=a+50;
     b:=b+60;
    end;
   a:=0;
   b:=0;
   for i:=6 to 11 do
    begin
     setfillstyle(i,blue);
     arc(300+a,90+b,210,150,15);
     line(300+a,90+b,287+a,83+b);
     line(300+a,90+b,287+a,98+b);
     floodfill(305+a,90+b,white);
     a:=a+50;
     b:=b+60;
    end;
   k:=3;
   arc(120,300,210,150,40);
   setfillstyle(12,blue);
   setfillpattern(f,white);
   line(120,300,85,279);
   line(120,300,85,320);
   floodfill(120,304,white);
   readkey;
  end;
begin
 gd:=0;
 initgraph(gd,gm,'D:\pascal\tp7\bgi');
 cleardevice;

end.


гл. программа :

Program main7;
 uses crt,unit1;
 var
 a:integer;
begin
 clrscr;
  repeat
  textbackground(0);
  clrscr;
  window(50,1,80,5);
  textbackground(11);
  clrscr;
  writeln;
  writeln;
  writeln('    TEXT MODE');
  window(15,10,65,21);
  repeat
   textbackground(14);
   clrscr;
   writeln('CASE');
   writeln('1 - type of line');
   writeln('2 - type of shtrix');
   writeln('3 - reklama');
   writeln('4 - Grafik');
   writeln('5 - diagramma');
   writeln('6 - gistogramma');
   writeln('7 - uzor');
   writeln('8 - multik');
   writeln('9 - vihod');
   readln(a);
   until a in [1..10];
   case a of
    9:;
    1:vivod;
    {2:shtrix_packman;
    3:advertisement;
    4:graphik_sinus;
    5:circle_diagramm;
    6:stolbik_diagram;
    7:holy_copypaste;
    8:real_packman;}
    else
     end;
  until a=9;
      end.

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

1) изменить немного процедуру Vivod (она у тебя графическая, так что переходим в самом начале в граф. режим...)
procedure vivod;
begin
  setgraphmode(gm);
  ... { Дальше - без изменений }
end;


2) подправить основную программу (внутри самого внешнего Repeat/Until выход в текст. режим, чтобы можно было пользоваться всеми процедурами модуля CRT):
Program main7;
 uses crt, graph, unit1;
 var
 a:integer;
begin
  repeat
    restorecrtmode; { <--- Вот основное изменение !!! }
    textbackground(0);
    clrscr;
    window(50,1,80,5);
    textbackground(11);
    clrscr;
    writeln;
    writeln;
    writeln('    TEXT MODE');
    window(15,10,65,21);
    repeat
      textbackground(1); { <--- Ну и здесь: textbackground не принимает параметры больше 7 }
      clrscr;
      writeln('CASE');
      writeln('1 - type of line');
      writeln('2 - type of shtrix');
      writeln('3 - reklama');
      writeln('4 - Grafik');
      writeln('5 - diagramma');
      writeln('6 - gistogramma');
      writeln('7 - uzor');
      writeln('8 - multik');
      writeln('9 - vihod');
      readln(a);
    until a in [1..10];

    case a of
      9: ;
      1: vivod;
      {
      2:shtrix_packman;
      3:advertisement;
      4:graphik_sinus;
      5:circle_diagramm;
      6:stolbik_diagram;
      7:holy_copypaste;
      8:real_packman;
      }
      else
      ;
    end;
    readln;
  until a=9;

end.
Вот так вот...
Andrewshkovskii
в меню он помоему возвращается,но вместо нормального меню,идут серые квадраты(на местах window),и остается на фоне процедура из graph.
volvo
Я перед тем как написать сюда, наверное, запустил у себя программу - все работает штатно... Вот архив со всеми изменениями:
Andrewshkovskii
всеравно остаются серые поля вместо меню..
volvo
Не знаю, что ты там творишь - вот EXE-шник вместе с TPU и BGI файлом, ВСЕ эти файлы распакуй в отдельную папку (НЕ ЧАСТЬ, а именно ВСЕ!, включая и EGAVGA.BGI) и запусти EXE... Вот тогда посмотрим, что у тебя остается, а что - нет...
Andrewshkovskii
спасибо за помощь!пробелма уже решена!=)утром перед инстом додумался что надо было сделать!извини за беспокойство!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.