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

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


Новичок
*

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

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


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

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


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

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


Подразумевается, что подключены CRT и Graph.


function Menu(Params: 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(Params) do begin
if Params[i] = #13 then begin
Inc(Count);
Strings[Count - 1] := '';
end else begin
Strings[Count - 1] := Strings[Count - 1] + Params[i];
end;
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;
end;


Примитивнее не могу.

Пример вызова такой процедуры:
Choise := Menu('New'#13'Open'#13'Save'#13'Exit');
Возвращает номер выбранного пункта, причём нумерация от нуля (New - это 0, а Exit - это 3)

То есть параметр - одна строчка, которая содержит все пункты меню, разделённые #13.
Количество пунктов - не более 15, каждый пункт не длинее 100 символов.
Если перед вызовом написать SetTextStyle(4, 0, 7); то выглядит интересно...


--------------------
 Оффлайн  Профиль  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:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name