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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Меню в Паскале
сообщение
Сообщение #1


Гость






Помогите сделать графическое меню для двух задач.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Вот я немного подкорректировал модуль (так он более читаемый):
Unit FMenu;

Interface

Type
  TMenu = record
    nOptions: byte;
    Option: array[1 .. 8] of string[22];
    clrActive, clrInActive: integer;
    Title: string[10];
  end;

Var
  menu: TMenu;

Function SimpleMenu: byte;

Implementation
Uses Graph, crt;

Function SimpleMenu : byte;
Var
  i: integer;
  ch: char;
  current: 1 .. 8;
begin
  setfillstyle(solidfill, darkgray);
  current := 1;

  settextstyle(4, 0, 2);
  setcolor(menu.clrActive);
  bar(0, 0, getmaxx, getmaxy);
  settextjustify(centertext, centertext);
  outtextxy(getmaxx div 2, (textheight(menu.Title) + 4) div 2, menu.Title);

  repeat
    for i := 1 to menu.nOptions do begin
      If i = current then setcolor(menu.clrActive)
      else setcolor(menu.clrInActive);
      outtextxy(getmaxx div 2, i*(textheight(menu.Option[i]) + 5) + 60,
                menu.Option[i]);
    end;

    ch := Readkey;
    case ch of
      #0:
        case readkey of
          #72: If current <> 1 then dec(current)
               else current := menu.nOptions;
          #80: If current <> menu.nOptions
               then inc(current) else current := 1;
        end;
    end;

  until ch = #13;
  SimpleMenu := current;
end;

End.


А вот так его вызывать:
uses Graph, FMenu;

var
  grDriver, grMode, ErrCode: integer;
  b: byte;
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
  if ErrCode <> grOk then begin
    Writeln('Graphics error:', GraphErrorMsg(ErrCode));
    readln; halt(100);
  end;

  { Заполняешь структуру }
  with menu do begin
    nOptions := 3;
    Option[1] := 'first';
    Option[2] := 'second';
    Option[3] := 'third';
    Title := 'menu #1';
    clrActive := red; clrInactive := white;
  end;
  { И вызываешь меню... }
  b := SimpleMenu; { <--- В переменной b - номер выбранного элемента }

  { Если понадобится еще одно меню в программе -
     еще раз перезаполни запись menu и вызывай SimpleMenu }
  Readln;
  CloseGraph;
end.



А вообще, я скоро выложу в FAQ и текстовую и графическую версии меню... yes2.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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