Поиск по слову menu пробовал? Выкладывалось как минимум 2 варианта...
ЧЕРМАК
31.01.2007 23:46
Я видел их и скачал одну, но у меня задачи сделани при помощи модуля CRT, а меню через Graph и мои задачи не пашут там! У меня не работает функция ''writeln''!
ЧЕРМАК
31.01.2007 23:55
Цитата(volvo @ 31.01.2007 19:36)
Поиск по слову menu пробовал? Выкладывалось как минимум 2 варианта...
Вот я немного переделал прогу, но у меня не пашет моя задача!
volvo
31.01.2007 23:55
Ну, не знаю, что ты скачал, а вот тут, например, лежит меню написанное именно для графического режима: меню во фрейме
ЧЕРМАК
1.02.2007 0:23
у меня ошибку выдаёт '' Cannot run a unit '' как её можно исправить?
volvo
1.02.2007 0:36
Так ты же, наверное, запускал ты программу? А нельзя - это модуль... Его надо подключать к программе (через Uses), потом в своей программе заполнять поля переменной N нужными тебе значениями (цвета выбранного/невыбранного элементов, количество кнопок, надписи на кнопках, ... там все написано), и вызывать функцию SimpleMenu, например:
uses FMenu; var selected: byte; begin { тут инициализация графики и заполнение структуры N } ... selected := SimpleMenu; { <--- Вот так вот ... } ...
ЧЕРМАК
1.02.2007 0:54
Там не понятно что на что менять! Если ты знаешь что на что менять, поменяй пожалуйста! ОЧЕНЬ нужно.
volvo
1.02.2007 1:47
Вот я немного подкорректировал модуль (так он более читаемый):
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 и текстовую и графическую версии меню...
mamont001
1.02.2007 1:53
Цитата(volvo @ 31.01.2007 20:47)
А вообще, я скоро выложу в FAQ и текстовую и графическую версии меню...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.