IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Кнопки, Эффект нажатия кнопки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Nikolya

Репутация: -  0  +


Помогите более рационально реализовать эффект нажатия кнопок, который описан в процедурах Perehod**. Цифры в названии процедуры обозначают то, с какой кнопки мы переходим на другую(1-Continue, 2-Help, 3-Exit). Движемся с помощью клавиш влево и вправо.


А вот и сам листинг


Код
Program Kyrs_proba;
  uses crt,graph,bmp;
  const LEFT=#075;
        RIGHT=#077;
  var f:text;
      flag:boolean;
      st,l:string;
      k:char;
      i:byte;
      x,y:integer;
      grMode, grDriver: integer;
      fl:boolean;
  Procedure Face;{********Ќ з «м­ п Є авЁ­Є *Bar3d(115,15,480,80,10,true);********}
    Begin
      SetBkColor(11);
      SetFillStyle(1,1);
      Bar(115,15,480,80);

{  ---ђ ¬Є  ¤«п "ЋЎгз ой п Їа®Ја ¬¬ "---}
      SetColor(1);
      Line(115,15,480,15);
      Line(480,15,480,80);
      Line(480,80,115,80);
      Line(115,80,115,15);
      Line(115,15,120,10);
      Line(120,10,485,10);
      Line(485,10,480,15);
      Line(485,10,485,75);
      Line(485,75,480,80);

      SetColor(15);
      SetTextStyle(7,0,5);
      OutTextXY(120,20,'Training course');

{  ---‚лў®¤ Theoretical principles of ORGANIC CHEMISTRY---}
      SetColor(4);
      settextstyle(1,0,6);
      OutTextXY(50,125,'Theoretical principles');
      OutTextXY(280,180,'of');
      OutTextXY(60,235,'ORGANIC CHEMISTRY');

{  ---ђЁб®ў ­ЁҐ 3-е Є­®Ї®Є ў­Ё§г---}
      SetColor(8);
      SetTextStyle(4,0,5);
      SetFillStyle(1,12);

{1}   Bar(25,340,180,385);
      Line(25,340,180,340);
      Line(180,340,180,385);
      Line(180,385,25,385);
      Line(25,385,25,340);
      OutTextXY(30,330,'Continue');

{2}   SetFillStyle(1,13);
      Bar3d(242,340,396,385,5,true);
      OutTextXY(280,330,'Help');
{3}   Bar3d(463,340,617,385,5,true);
      OutTextXY(505,330,'Exit');

      Setcolor(1);
      SetTextStyle(2,0,5);
      OutTextXY(445,460,'written by Nikolay Buryak');

{  ---ЊҐаж ­ЁҐ а ¬ЄЁ---           }
      fl:=true;

      While not keypressed do
        Begin
          If fl then Begin
                       SetColor(11);
                       SetLineStyle(3,0,3);
                       Line(0,0,640,0);
                       Line(639,0,639,480);
                       Line(640,479,0,479);
                       Line(0,480,0,0);
                       fl:=false;
                       delay(30000);
                    End
                else Begin
                       SetColor(4);
                       SetLineStyle(3,0,3);
                       Line(0,0,640,0);
                       Line(639,0,639,480);
                       Line(640,479,0,479);
                       Line(0,480,0,0);
                       fl:=true;
                       delay(30000);
                     End
        End;
      readkey;
    End;

    Procedure Perehod12;
      Begin
        SetFillStyle(1,13);
        Bar3d(25,340,180,385,5,true);
        OutTextXY(30,330,'Continue');

        SetFillStyle(1,11);
        Bar(241,334,402,385);

        SetFillStyle(1,12);
        Bar(242,340,396,385);
        Line(242,340,396,340);
        Line(396,340,396,385);
        Line(396,385,242,385);
        Line(242,385,242,340);
        OutTextXY(280,330,'Help');
        i:=2
      End;

    Procedure Perehod23;
      Begin
        SetFillStyle(1,13);
        Bar3d(242,340,396,385,5,true);
        OutTextXY(280,330,'Help');

        SetFillStyle(1,11);
        Bar(460,335,625,390);

        SetFillStyle(1,12);
        Bar(463,340,617,385);
        Line(463,340,617,340);
        Line(617,340,617,385);
        Line(617,385,463,385);
        Line(463,385,463,340);
        OutTextXY(505,330,'Exit');
        i:=3;
      End;

    Procedure Perehod31;
      Begin
        SetFillStyle(1,13);
        Bar3d(463,340,617,385,5,true);
        OutTextXY(505,330,'Exit');

        SetFillStyle(1,11);
        Bar(24,335,185,385);

        SetFillStyle(1,12);
        Bar(25,340,180,385);
        Line(25,340,180,340);
        Line(180,340,180,385);
        Line(180,385,25,385);
        Line(25,385,25,340);
        OutTextXY(30,330,'Continue');
        i:=1;
      End;

    Procedure Perehod13;
      Begin
        SetFillStyle(1,13);
        Bar3d(25,340,180,385,5,true);
        OutTextXY(30,330,'Continue');

        SetFillStyle(1,11);
        Bar(460,335,625,390);

        SetFillStyle(1,12);
        Bar(463,340,617,385);
        Line(463,340,617,340);
        Line(617,340,617,385);
        Line(617,385,463,385);
        Line(463,385,463,340);
        OutTextXY(505,330,'Exit');
        i:=3
      End;

    Procedure Perehod32;
      Begin
        SetFillStyle(1,13);
        Bar3d(463,340,617,385,5,true);
        OutTextXY(505,330,'Exit');

        SetFillStyle(1,11);
        Bar(241,334,402,385);

        SetFillStyle(1,12);
        Bar(242,340,396,385);
        Line(242,340,396,340);
        Line(396,340,396,385);
        Line(396,385,242,385);
        Line(242,385,242,340);
        OutTextXY(280,330,'Help');
        i:=2
      End;

    Procedure Perehod21;
      Begin
        SetFillStyle(1,13);
        Bar3d(242,340,396,385,5,true);
        OutTextXY(280,330,'Help');

        SetFillStyle(1,11);
        Bar(24,335,185,385);

        SetFillStyle(1,12);
        Bar(25,340,180,385);
        Line(25,340,180,340);
        Line(180,340,180,385);
        Line(180,385,25,385);
        Line(25,385,25,340);
        OutTextXY(30,330,'Continue');
        i:=1
      End;

    Begin {main}
      clrscr;
      grDriver:=Detect;
      initGraph (grDriver,grMode,'C:\bp\bgi');
{      Assign(f,'text.txt');
      reset(f);
      SBMI('1.bmp',0,0,0);
      l:=readkey;
      cleardevice;}
      Face;
{*******ЏҐаҐ¤ўЁ¦Ґ­ЁҐ Є« ўЁи ¬Ё-Єгаб®а ¬Ё Є­®Ї®Є ­  аЁбг­ЄҐ*************}

      SetLineStyle(0,0,0);
      SetColor(8);
      SetTextStyle(4,0,5);
      i:=1;

      While i<>4 do
        Begin
          k:=readkey;
          Case k of
            Right: Case i of
                     1:  Perehod12;
                     2:  Perehod23;
                     3:  Perehod31
                   End;
            Left:  Case i of
                     1: Perehod13;
                     2: Perehod21;
                     3: Perehod32;
                   End;
          End;
          If k=#13 then Case i of
                          1:Continue;
                          2:Continue;
                          3:Break
                        End;


        End;

{----------------END----------------------------}

    {  x:=0;
      y:=0;
      While not Eof(f) do
        Begin
          read(f,st);
          case ord(st) of
            128..239:st:=chr(ord(st)-64);
            240..255:st:=chr(ord(st)-16);
          end;
          Case st of
            '*':Begin
                  readkey;
                  cleardevice;
                  x:=0;
                  y:=0
                End;
            '/':readkey;
            else Outtextxy(x,y,st);
          End;
          x:=x+8;
          If x>635 then Begin
                          y:=y+10;
                          x:=0
                        End;

      End;
      close(F);}
    End.



{Звиняйте за неструктурность, это только здесь так получилось... }

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
более рационально реализовать эффект нажатия кнопок
Гораздо более рационально будет выделить рисование кнопки в отдельную процедуру, как я сделал в аттаче. Посмотри, насколько уменьшилась программа...

(небольшая накладка с кнопкой Continue - из за того, что ты сделал ее размер в самом начале, при отрисовке, на 1 пиксель меньше чем у 2-х других кнопок. Я не стал исправлять это в процедуре Face, поправь сам...)


Прикрепленные файлы
Прикрепленный файл  MENU.PAS ( 4.28 килобайт ) Кол-во скачиваний: 80
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Nikolya

Репутация: -  0  +


Большое спасибо за помощь! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 22.11.2017 17:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"