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