IPB
ЛогинПароль:

> Опять про меню, В одной процедуре
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской
Реальное имя: 1234

Репутация: -  -1  +


Изучивши предложенные варианты и впоследствии систематизировав их, я понял что это не то. А вот те критерии, которые считаю главенствующими в моём представлении о меню:
1)Небольшое(20-40 строк)-иначе говоря для чайников;
2)Расположенное только в процедуре(НЕ в модуле и основной программе)-чтобы, как говорится с места в карьер;
3)Управление меню только КЛАВИШАМИ (точнее стрелками "вверх" и "вниз"). Причём указанная в данный момент (как бы её назвать) титра должна делать вид, что именно её на даный момент выбрали;
4)Прежде чем спросить про язык, на которым я ПРОШУ написать меню, просто вспомните название сайта;
5)Всего 3 титры.
За сим удаляюсь с большой надеждою, всегда ваш 1234.

Сообщение отредактировано: 1234 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской
Реальное имя: 1234

Репутация: -  -1  +


Заменой преведённой выше воспользовался. Эффект тот же. Как пахало, так и пашет. А вот про пункт Exit ты меня заинтересовал. И "приведённый ниже кусок" (как вы изволили выразиться) у меня в основной части. Чтобы лучше понять, связываю меню с програмкою-так сказать, для наглядности.

Uses Graph,Crt;
const
Left =#75;
Right = #77;
Up = #72;
Esc = #27;
var
ErrCode : Integer;
P1: pointer;
S, x, y, sized,i,j :integer;
Ch: char;
x1: integer;
C:Char;Sl:Integer;
Function Menu(new: string): Integer;
Var Count: integer;
Strings: array [0 .. 15] of string [127];
I: integer;
Ch: char;
X, Y, H: integer;
Begin
Count := 1;
Strings[0] := '';
For i := 1 to Length(new) do
begin
If new[i] = #13 then
begin
Inc(Count);
Strings[Count - 1] := '';
end
else
Strings[Count - 1] := Strings[Count - 1] + new[i];
end;
SetTextJustify(CenterText, CenterText);
H := TextHeight('A') + 10;
ClearDevice;
SetColor(WHITE);
For i := 0 to Count - 1 do
OutTextXY(GetMaxX div 2,
GetMaxY div 2 - (Count - 1) * H div 2 - H div 4 + i * H, Strings[i]);
I := 0;
Repeat
SetColor(GREEN);
X := TextWidth(Strings[i]) + 10;
Y := TextHeight(Strings[i]) + 10;
Rectangle(GetMaxX div 2 - X div 2,
GetMaxY div 2 - (Count - 1) * H div 2 + i * H - Y div 2,
GetMaxX div 2 + X div 2,
GetMaxY div 2 - (Count - 1) * H div 2 + i * H + Y div 2);
Ch := readkey;
SetColor(BLACK);
X := TextWidth(Strings[i]) + 10;
Y := TextHeight(Strings[i]) + 10;
Rectangle(GetMaxX div 2 - X div 2,
GetMaxY div 2 - (Count - 1) * H div 2 + i * H - Y div 2,
GetMaxX div 2 + X div 2,
GetMaxY div 2 - (Count - 1) * H div 2 + i * H + Y div 2);
Case ch of
#0:
Case ReadKey of
#72:
Begin
Dec(i);
If i < 0 then
I := Count - 1;
End;
#80:
Begin
Inc(i);
If i >= Count then
I := 0;
End;
End;
End;
Until ch = #13;
Menu := i;
If ch=#13 then ClearDevice;
End;
Procedure Init;
Var Gd,Gm:Integer;
Begin
Gd:=Detect;
InitGraph(Gd,Gm,'')
End;
Begin
Init;
{Число клавиши 98 взял от фонаря(главное чтоб выполнялось)}
While c<>#98 do
{Вот здесь где-то зарыта собака-чтобы меню высветилось необходимочто-нибудь нажать}
Begin
If ReadKey=#0 Then ReadKey;
Case Menu('New'#13'option'#13'Exit') of
0: C:=#98;
{Данное присваивание- это как какой-то доступ к последующему этапу}
1:Begin
SetTextStyle(DefaultFont,HorizDir,5);
SetColor(LightBlue);
{Здесь я просто хочу, чтобы на экране высветились сведения об игре}
OutTextXY(140,90,'Hello');
End;
2: Exit;{А здесь то в чём ошибка}
End;
Case Menu('Easy'#13'Medium'#13'Hard'#13'Back') of
0:
Begin
Sl:=50;
{Это у меня уровень сожности}
C:=#98;
{Эта операция-для доступа к игре}
End;
1:
Begin
Sl:=100;
C:=#98;
End;
2:
Begin
Sl:=1;
C:=#98;
End;
3: C:=#4;
end;
{4-число от фонаря: главное-что не 98}
end;
setfillstyle(1,4); {Эту часть програмы оставьте без анализа-она просто демонстрирует работу меню}
setcolor(4);
line(110,50,110,60);
line(110,70,110,73);
setfillstyle(1,1);
setcolor(1);
fillellipse(110,65,20,5);
floodfill(110,65,1);
line(130,73,90,73);
sized:=imagesize(30,50,180,50);
getmem(p1,sized);
getimage(30,56,180,90,p1^);
cleardevice;
x:=225; y:=450; x1:=x;
putimage(x,y,p1^, xorput);
repeat
ch:=readkey;
if ch=#0 then ch:=readkey;
case ch of
left : x1:=x-10;
right: x1:=x+10;
end;
if ch=up then
begin
for i:=1 to 450 do
begin
if i<440 then putpixel(x1+80,440-i+5,white); delay (1);
putpixel(x1+80,440-i+10,black);
end;
end;
if (x1 < 0) or (x1 > GetmaxX-150) then x1:=x;
putimage(x,y,p1^,xorput);
putimage(x1,y, p1^,xorput);
x:=x1;
until ch=Esc;
CloseGraph;
end.
End.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
1234   Опять про меню   2.02.2007 22:01
TarasBer   Подразумевается, что подключены CRT и Graph. fun…   2.02.2007 23:24
volvo   Больше так не говори, хорошо? TMT Pascal / VP (Vi…   2.02.2007 23:43
1234   Да, Pascal безграничен. :yes2: Как сделать, чтобы…   3.02.2007 21:49
TarasBer   Да, Pascal безграничен. :yes2: Как сделать, чтоб…   3.02.2007 23:04
mamont001   Просто делаеш : if нажато уровень сложности then b…   3.02.2007 22:54
1234   А как сделать так, чтобы (желательно в самой подпр…   4.02.2007 22:46
Bokul   Ты сначала разберись с тем, что тебе дали. Подобны…   4.02.2007 22:57
1234   Ты знаешь, только хотел сказать. Чтобы осуществлят…   4.02.2007 23:27
volvo   Тогда и у меня к тебе вопросик - что есть по-твоем…   4.02.2007 23:35
1234   Не мешало бы мсье TarasBerу написать комментарии к…   4.02.2007 23:57
TarasBer   Не мешало бы мсье TarasBerу написать комментарии …   5.02.2007 1:08
TarasBer   Пока писал коментарии, под конец нервы стали сдава…   5.02.2007 1:57
1234   Заменой преведённой выше воспользовался. Эффект то…   5.02.2007 18:03
TarasBer   Эээ... Я не понял. Вам надо, чтом меню сразу высве…   5.02.2007 18:57
1234   Первый случай, второй... Это хоть в основной части…   5.02.2007 20:25
TarasBer   Первый случай, второй... Это хоть в основной част…   5.02.2007 21:07
volvo   Глобальные - ОБЯЗАНЫ обнуляться, локальные - нет, …   5.02.2007 21:12
1234   Объяснить-то ты всё объяснил. А мне необходимо поя…   5.02.2007 21:45
TarasBer   Да, глобальные обнуляются... Даже массивы, как ни …   6.02.2007 18:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 23:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name