Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Меню в Паскале

Автор: ЧЕРМАК 31.01.2007 23:35

Помогите сделать графическое меню для двух задач.

Автор: volvo 31.01.2007 23:36

Поиск по слову menu пробовал? Выкладывалось как минимум 2 варианта...

Автор: ЧЕРМАК 31.01.2007 23:46

Я видел их и скачал одну, но у меня задачи сделани при помощи модуля CRT, а меню через Graph и мои задачи не пашут там! У меня не работает функция ''writeln''!

Автор: ЧЕРМАК 31.01.2007 23:55

Цитата(volvo @ 31.01.2007 19:36) *

Поиск по слову menu пробовал? Выкладывалось как минимум 2 варианта...





Вот я немного переделал прогу, но у меня не пашет моя задача!


Прикрепленные файлы
Прикрепленный файл  MENU.PAS ( 2.63 килобайт ) Кол-во скачиваний: 536

Автор: volvo 31.01.2007 23:55

Ну, не знаю, что ты скачал, а вот тут, например, лежит меню написанное именно для графического режима:
http://forum.pascal.net.ru/index.php?s=&showtopic=5103&view=findpost&p=41079

Автор: ЧЕРМАК 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 и текстовую и графическую версии меню... yes2.gif

Автор: mamont001 1.02.2007 1:53

Цитата(volvo @ 31.01.2007 20:47) *

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


good.gif