Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2011, 16:39   #1
ivannes
Пользователь
 
Аватар для ivannes
 
Регистрация: 16.06.2011
Сообщений: 42
Восклицание Graph-меню

Решил написать на graph менюшку (попросили меня) а тут проблема такая:
с указателем тока вниз а далее буковки на экран. Как от этого избавится? Да и пару советов не помешало бы по поводу входов в пункты меню и выходы из них )

Код:
program menu_graph;
uses
    graph, crt;
var
   Gd, Gm: Integer;
   Color:Byte;
   key: string;
   x1,y1,x2,y2:integer;
begin
Gd:= Detect;
InitGraph(Gd,Gm,'');
If GraphResult <> grOk then
   Halt(1);
Randomize;
SetBkColor(Red);{рисование интерфейса}
SetColor(White);
SetLineStyle(0,0,3);
Rectangle(10,10,630,470);
Rectangle(10,40,630,470);
moveto(220,15); {прорисовка пунктов меню}
settextstyle(0,0,3);
outtext('Main Menu');
moveto(240,100);
setcolor(brown);
settextstyle(0,0,2);
outtext('New Game');
moveto(250,130);
outtext('Options');
moveto(270,160);
outtext('Help');
moveto(270,190);
outtext('Exit');
setcolor(blue);
x1:=230;
y1:=90;
x2:=380;
y2:=125;
rectangle(x1,y1,x2,y2);
key:=readkey;
if key = 's' then begin {клавиша s, пока клавиши w не надо}
setcolor(red);
rectangle(x1,y1,x2,y2);
y1:=y1+30;
y2:=y2+30;
setcolor(blue);
rectangle(x1,y1,x2,y2);
end;
readln;
closeGraph;
end.
Помог? тогда жми на весы
Девушка что оператор мобильной связи, когда денег нет, то она не доступна ©Радио Маяк
ivannes вне форума Ответить с цитированием
Старый 24.07.2011, 18:42   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Здесь, в общем-то, нужна несложная процедура с циклом.
Если подождёте 15 минут, выложу примерный код.

Код:
Uses CRT,Graph;

Procedure HideMenu;
Begin
        SetColor(Black);
        OutTextXY(250,250,'1. New Game');
        OutTextXY(250,300,'2. Continue');
        OutTextXY(250,350,'3. Exit');
End;

Procedure DrawMenu(Selected : Integer);
Begin
        HideMenu;
        Case Selected Of
        1 : 
        Begin
                SetColor(Yellow);
                OutTextXY(250,250,'1. New Game');
                SetColor(Blue);
                OutTextXY(250,300,'2. Continue');
                SetColor(Blue);
                OutTextXY(250,350,'3. Exit');
        End;
        2 : 
        Begin
                SetColor(Blue);
                OutTextXY(250,250,'1. New Game');
                SetColor(Yellow);
                OutTextXY(250,300,'2. Continue');
                SetColor(Blue);
                OutTextXY(250,350,'3. Exit');
        End;
        3 : 
        Begin
                SetColor(Blue);
                OutTextXY(250,250,'1. New Game');
                SetColor(Blue);
                OutTextXY(250,300,'2. Continue');
                SetColor(Yellow);
                OutTextXY(250,350,'3. Exit');
        End;
        End;
End;

Var
     gd , gm : Integer;
     key : Char;
     current : Integer;
Begin
        gd:=Detect;
        InitGraph(gd,gm,'');
        key:=#0;
        current:=1;
        DrawMenu(current);
        While key <> #13 Do
        Begin
                key:=ReadKey;
                If Key = 'w' Then 
                Begin
                        Inc(current);
                        If current > 3 Then current:=1;
                End;
                If Key = 's' Then
                Begin
                        Dec(current);
                        If current < 1 Then current:=3;
                End;
                DrawMenu(current);
        End;
        CloseGraph;
End.
Код примерный, возможны синтаксические и логические ошибки.
И, кстати, здесь есть что оптимизировать и улучшать. Сам опробовать не могу, ибо стоит Windows 7, а она не даёт толком поработать в Borland Pascal.

P.S. Проверил, синтаксических ошибок нет

Последний раз редактировалось _-Re@l-_; 24.07.2011 в 19:05.
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.07.2011, 19:04   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Угу, _-Re@l-_ абсолютно прав.


ну, до кучи ещё и мой вариант можете посмотреть ТУТ
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.07.2011, 19:08   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Serge_Bliznykov, спасибо
И ещё. Если хотите, чтобы текст был красивый, можете добавить ещё одну процедуру:
Код:
Procedure SetFontType(Size : Integer;TType : Integer);
Begin
        SetTextStyle(TType,HorizDir,Size);
End;

///....

gd:=Detect;
InitGraph(gd,gm,'');
SetFontType(4,5);

///...
Теперь текст будет покрасивее

Последний раз редактировалось _-Re@l-_; 24.07.2011 в 20:43.
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.07.2011, 03:54   #5
ivannes
Пользователь
 
Аватар для ivannes
 
Регистрация: 16.06.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Serge_Bliznykov, спасибо
И ещё. Если хотите, чтобы текст был красивый, можете добавить ещё одну процедуру:
Код:
Procedure SetFontType(Size : Integer;TType : Integer);
Begin
        SetTextStyle(TType,HorizDir,Size);
End;

///....

gd:=Detect;
InitGraph(gd,gm,'');
SetFontType(4,5);

///...
Теперь текст будет покрасивее
ну на счёт этого, я сам соображу), кстати в коде была ошибка: нажмаешь на w указатель вниз, а нажмешь на s указатель вверх. Но ни че я её сразу исправил)
Помог? тогда жми на весы
Девушка что оператор мобильной связи, когда денег нет, то она не доступна ©Радио Маяк
ivannes вне форума Ответить с цитированием
Старый 25.07.2011, 18:20   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
кстати в коде была ошибка: нажмаешь на w указатель вниз, а нажмешь на s указатель вверх. Но ни че я её сразу исправил)
Ах да. Ну да это случайность, а не ошибка. Просто перепутал верх и низ.
_-Re@l-_ вне форума Ответить с цитированием
Старый 28.07.2011, 14:56   #7
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость Танк!

В моей чудо игре есть прекрасное меню!
Вложения
Тип файла: rar TANK2.rar (4.2 Кб, 38 просмотров)
sir.andrey вне форума Ответить с цитированием
Старый 28.07.2011, 20:33   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

sir.andrew, тебе этот код
http://programmersforum.ru/showpost....3&postcount=21
ничего не напоминает? И кстати где ты там увидел меню?
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню как на сайте p&g (меню ввиде таблицы) ilma55 WordPress и другие CMS 0 19.09.2010 19:09
И сново sendMessage =) Как нажать пункт верхнего меню и меню правой кнопки? TwiX Win Api 9 15.10.2009 01:57
Оформление меню (вытекает из другого меню) TilerDerton Общие вопросы Delphi 3 20.08.2009 02:20
Для доступа к пунктам главного меню клавиши ALT + подчеркнутая буква меню в офис 2007? Окоча Юра Microsoft Office Word 1 24.02.2009 12:29
Меню с Items в виде набора Bitmap (как меню редактирования в Word'е) chandrasecar Мультимедиа в Delphi 7 14.01.2009 09:20