Поиск по слову 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;
InterfaceType
TMenu = record
nOptions: byte;
Option: array[1 .. 8] ofstring[22];
clrActive, clrInActive: integer;
Title: string[10];
end;
Var
menu: TMenu;
Function SimpleMenu: byte;
ImplementationUses 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 div2, (textheight(menu.Title) + 4) div2, menu.Title);
repeatfor i := 1to menu.nOptions dobeginIf i = current then setcolor(menu.clrActive)
else setcolor(menu.clrInActive);
outtextxy(getmaxx div2, i*(textheight(menu.Option[i]) + 5) + 60,
menu.Option[i]);
end;
ch := Readkey;
case ch of#0:
case readkey of#72: If current <> 1then 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 thenbegin
Writeln('Graphics error:', GraphErrorMsg(ErrCode));
readln; halt(100);
end;
{ Заполняешь структуру }with menu dobegin
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 и текстовую и графическую версии меню...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.