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

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

Форум «Всё о Паскале» _ Задачи _ Объясните как реализовать выход из процедуры обратно в меню

Автор: Andrewshkovskii 14.03.2007 1:40

Необходимо оформить программу следующим образом :
Есть главное меню,выбирает из меню нужный нам пункт,выполняется процедура,после чего ДОЛЖНО все вернутся обратно в меню для выбора следующего пункта
вот листинги модуля и гл. программы :

 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 14.03.2007 2:57

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

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 14.03.2007 3:37

в меню он помоему возвращается,но вместо нормального меню,идут серые квадраты(на местах window),и остается на фоне процедура из graph.

Автор: volvo 14.03.2007 3:42

Я перед тем как написать сюда, наверное, запустил у себя программу - все работает штатно... Вот архив со всеми изменениями:


Прикрепленные файлы
Прикрепленный файл  mnu.rar ( 1.04 килобайт ) Кол-во скачиваний: 185

Автор: Andrewshkovskii 14.03.2007 3:52

всеравно остаются серые поля вместо меню..

Автор: volvo 14.03.2007 18:07

Не знаю, что ты там творишь - вот EXE-шник вместе с TPU и BGI файлом, ВСЕ эти файлы распакуй в отдельную папку (НЕ ЧАСТЬ, а именно ВСЕ!, включая и EGAVGA.BGI) и запусти EXE... Вот тогда посмотрим, что у тебя остается, а что - нет...


Прикрепленные файлы
Прикрепленный файл  menu_exe.rar ( 18.82 килобайт ) Кол-во скачиваний: 180

Автор: Andrewshkovskii 14.03.2007 21:55

спасибо за помощь!пробелма уже решена!=)утром перед инстом додумался что надо было сделать!извини за беспокойство!