![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
ЧЕРМАК |
![]()
Сообщение
#1
|
Гость ![]() |
Помогите сделать графическое меню для двух задач.
|
![]() ![]() |
volvo |
![]()
Сообщение
#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 и текстовую и графическую версии меню... ![]() |
![]() ![]() |
![]() |
Текстовая версия | 31.07.2025 3:43 |