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

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


Новичок
*

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

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


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

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


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

 



- Текстовая версия 18.07.2025 8:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"