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

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

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

> Меню в Паскале
ЧЕРМАК
сообщение 31.01.2007 19:35
Сообщение #1


Гость






Помогите сделать графическое меню для двух задач.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 31.01.2007 21:47
Сообщение #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

 

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